Service层需要接口吗?
点击上方“程序员大白”,选择“星标”公众号
重磅干货,第一时间送达

链接:toutiao.com/i6882356844245975563
前几天刷头条又刷到了「Service层和Dao层真的有必要每个类都加上接口吗?」这个问题,之前简单回答了一波,给出的观点是「看情况」
现在结合我参与的项目以及阅读的一些项目源码来看。如果项目中使用了像Spring这样的依赖注入框架,那可以不用接口!
先来说说为什么使用了依赖注入框架以后,可以不使用接口!
我整理了支持Service层和Dao层需要加上接口的理由,总结下来就这么三个:
- 可以在尚未实现具体Service逻辑的情况下编写上层代码,如Controller对Service的调用 
- Spring默认是基于动态代理实现AOP的,动态代理需要接口 
- 可以对Service进行多实现 
- 先在Controller层编写逻辑,遇到需要委托Service调用的地方,直接先写出调用代码。 
- 优先完成Controller层的流程 
- 然后使用IDE的自动补全,对刚才调用下层的代码生成对应的类和方法,在里面添加TODO 
- 等所有的类和方法都补全了,再基于TODO,按照上面的流程去一个个的完善逻辑。 
- 此方法可以使你对业务流程有比较好的理解。 
- Controller 
- Service 
- Dao 
- Controller 
- Service 
- --- 接口在一个包中 
- impl --- 实现在另一个包里 
- Dao 
- Controller 
- Service 
- ---- 接口在一个包中 
- impl ---实现在另一个包里 
- impl2 ---新实现在另一个包里 
- Dao 
- Controller 
- Service 
- ---- 接口在一个包中 
- impl ---实现在另一个包里 
- Service2 
- impl2 ---新实现在另一个包里 
- Dao 
- Controller 
- Service --- 接口模块 
- ServiceImpl 
- impl ---实现在另一个包里 
- ServiceImpl2 
- impl2 ---新实现在另一个包里 
- Dao 
- Controller 
- Service --- 接口模块 
- ServiceImpl 
- impl ---实现在另一个包 
- ServiceImpl2 
- impl ---新实现和老实现在相同的包中 
- Dao 
- Controller 
- Service1 --- 老实现 
- Service2 --- 新实现 
- Dao 
推荐阅读
关于程序员大白
程序员大白是一群哈工大,东北大学,西湖大学和上海交通大学的硕士博士运营维护的号,大家乐于分享高质量文章,喜欢总结知识,欢迎关注[程序员大白],大家一起学习进步!
