开发中一定需要 service 接口和 serviceImpl 吗

2019-08-17 10:54:25 +08:00
 vanishxiaoma

开发中一定需要 service 接口和 serviceImpl 吗

感觉不用接口直接写实现开发更加方便

13959 次点击
所在节点    Java
36 条回复
Lxxyx
2019-08-17 11:00:19 +08:00
这样做的好处可以很容易实现依赖反转。直接写虽然方便,但是底层依赖发生变动时,改代码会很痛苦
cheng6563
2019-08-17 11:00:58 +08:00
不用,三层架构的业务层基本不可能多态,写个接口没啥意义
niubee1
2019-08-17 11:06:11 +08:00
说是为了应对底层变动, 结果底层换数据库是不可能换数据库的, 辛辛苦苦写了一大堆为了应付变动的代码, 结果整个项目周期,除了需求, 啥也没动.........
micean
2019-08-17 11:07:17 +08:00
本来是要的,因为 java 本身用代理功能需要 interface
但是后面 spring 用 cglib 做动态代理了,直接修改字节码,也就不需要强制这套写法了
cyssxt
2019-08-17 11:12:11 +08:00
没有必要。我觉得这个是上个时代的代理的方式导致的。
zjsxwc
2019-08-17 11:14:30 +08:00
大部分项目业务从开始到结束也只有一个 serviceImpl
只是为了遵循约定,每个业务都写一个 service 接口和一个 serviceImpl
vincel
2019-08-17 11:15:08 +08:00
这是企业级的架构 当然你项目规模没那么大就不需要了
sorra
2019-08-17 11:40:27 +08:00
模块化开发是需要的,分成 API 包和 impl 包,别人只需要依赖你的 API 包
passerbytiny
2019-08-17 11:46:57 +08:00
十年前,一定要;现在,一定不要:现在见到这种代码要三思,见到强制要求这种风格的要跑路。
orangeD
2019-08-17 11:52:42 +08:00
完全没有必要。就算万一有要用到接口,现在 IED 的重构功能也可以很方便地抽出接口
luckylo
2019-08-17 12:02:18 +08:00
就多一个 service 接口都在说了,我司遗留代码 mapper 层直接操作数据库,dao 层直接操作 mapper 层,就直接操作,没其他函数封装,service 层操作 dao 层,这里才有封装,封装还不彻底,controller 层都有看到直接调用 mapper 层的,反正代码非常乱。
nicevar
2019-08-17 12:06:12 +08:00
具体得看是什么项目了,你自己的项目随便整都行,公司的项目就得注意了
Bromine0x23
2019-08-17 12:38:40 +08:00
大部分情况下确实没啥必要,但是还是会自觉地这么做,迫使自己思考这个 Service 的职责,Service 的功能也能展示得清楚些
tachikomachann
2019-08-17 12:40:51 +08:00
按现在大行其道的微服务的话,我觉得是没必要。。
NeinChn
2019-08-17 12:52:04 +08:00
如果只有一种实现,可以不做,但是一定要区分好 public 和 private/protect 方法,避免内部私有逻辑被其他人调用
如果有多重实现,你觉得呢,难不成搞个 duck type 的概念,基于反射调用同名方法么,Python 不适合协作开发也不是一天两天的事情了,不要写的像 Python 就行.
daozhihun
2019-08-17 14:38:52 +08:00
如果是公司长久的项目,建议分开。
这个东东对自动化测试还是很有用的。
JRay
2019-08-17 14:40:46 +08:00
之前我也想过这个东西有没有必要,现在公司直接放弃 serviceImpl 了
StarkWhite
2019-08-17 16:36:35 +08:00
每个业务写一个 Service 和 ServiceImpl,即便操作同一张表,别人也不会复用你的,甚至自己在其它业务也不会复用。
方便单元测试?有几个项目真正把单元测试落实的?需求总在变,测试代码经常跑不通也得一起改,加班加点业务需求都忙不完还有时间管单元测试?
敏捷开发原则之一:简单的方法就是好的方法
过早优化是万恶之源,不要在不确定的情况下加入不必要的复杂性
StarkWhite
2019-08-17 16:44:08 +08:00
controller -> manager -> service -> dao -> mapper
manager, service, dao 大部分都是重复的代码,一个方法,里面就一行,调用下一层的同名方法,业务都是 SQL 实现,
一堆功能几乎重复文件看着就头疼,调代码跳来跳去也烦
StarkWhite
2019-08-17 16:51:32 +08:00
业务真要改了,不都是改业务逻辑代码?所谓的被依赖和复用大部分都是拍脑袋凭空想象,就自己写的那一个接口依赖了而已,既然都是自己写的,不写冗余的类和接口,代码更少不是更容易改?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/592647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX