为什么基于接口而非实现编程?有必要为每个类都定义接口吗?
1. 重要内容
1.1 提高抽象封装意识
“基于接口而非实现”,这条原则的另外一个表述方式,是“基于抽象而非实现编程”。这条设计原则的初衷是要我们在开发编码的过程中一定要有抽象意识、封装意识、接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性、扩展性、可维护性。
1.2 接口命名
在定义接口的时候,一方面,命名要足够通用,不能包含跟具体实现相关的字眼,另一方面,与特定实现有关的方法不要定在接口里面。
1.3 系统设计
“基于接口而非实现编程”这条原则,不仅仅可以指导非常细节的编程开发,可以指导更加上层的架构设计、系统设计等。比如,服务端与客户端之间的“接口”设计、类库的“接口”设计。
2. 读后思考
问题:那现在的MVC代码,要求service先写接口,然后再写实现,有必要嘛?
个人想法:还是有必要的原因如下:
- 大部分情况下,我们去了解业务,基本上是看接口包含了哪些方法,这样就一个这个服务包含了什么行为,直接看实现类的话,代码量大,还包含各种私有方法,阅读起来非常的繁琐没有直接看接口类简单明了;
- 从设计的角度来说,一般先定义Controller层与Service层接口,定义请求出参入参结构,配置好参数验证规则,Review评审设计,再更新接口到API文档中心,然后开始写具体实现,这样的话可以提前做到对于整个业务的功能点条理分析,做到先设计再动手可以有效的提高效率和降低返工率;
- 基于接口而非实现的做法,很方便对功能点做快速调整或者扩展,通过Spring本身的容器管理实现一些定制化的特殊需求,脱离具体的定制实现而提供通用模块。