最近在开始学习Spring Boot
,打算转后端开发。在学习过程中发现很多项目都是xxController<-xxService(接口)<-xxServiceImpl
这种结构,而大部分情况针对xxService(接口)
只有一种实现。
于是产生的疑问,为什么需要xxService(接口)
?xxController
中直接使用xxServiceImpl
不就好了吗?
网上看了一圈,比较认可这个看法
java web 中dao 层和service层都使用接口,是否是为使用接口而使用接口? - 小猪的回答 - 知乎
https://www.zhihu.com/question/36021012/answer/116954747
另外我对 Java Web 项目使用接口的理解:
- 如果使用 Spring,尽量使用面向接口编程,才能发挥 Spring IOC 作用,不用关心具体实现对象的生命周期,好处是使用方便和内存占用优化。
- 大项复杂的项目需要,及一个接口后面可能对应着多个不同的实现。
- 多人分层合作,有人负责 Controller 层,有人负责 Service 层,有人负责 DAO 层,大家可以先定义好接口然后就开始各写各的代码了,互不影响。
- 控制暴露给外部的内容。接口只会定义公开的部分,而如果直接使用实现对象,会看到实现对象中的私有部分,这部分可能有些是重要的涉及到安全方面的信息。
结论
我应该会按上面知乎回答的方式,根据项目、团队和管理情况来决定使用与否。