1. 函数的命名不能暴露任何实现细节。比如,前面提到的 uploadToAliyun() 就不符合要
求,应该改为去掉 aliyun 这样的字眼,改为更加抽象的命名方式,比如:upload()。
2. 封装具体的实现细节。比如,跟阿里云相关的特殊上传(或下载)流程不应该暴露给调
用者。我们对上传(或下载)流程进行封装,对外提供一个包裹所有上传(或下载)细
我们按照这个思路,把代码重构一下。重构后的代码如下所示:
节的方法,给调用者使用。
为实现类定义抽象的接口。具体的实现类都依赖统一的接口定义,遵从一致的上传功能
协议。使用者依赖接口,而不是具体的实现类来编程。
1.“基于接口而非实现编程”,这条原则的另一个表述方式,是“基于抽象而非实现编
程”。后者的表述方式其实更能体现这条原则的设计初衷。我们在做软件开发的时候,一定
要有抽象意识、封装意识、接口意识。越抽象、越顶层、越脱离具体某一实现的设计,越能
提高代码的灵活性、扩展性、可维护性。
2. 我们在定义接口的时候,一方面,命名要足够通用,不能包含跟具体实现相关的字眼;
另一方面,与特定实现有关的方法不要定义在接口中。
3.“基于接口而非实现编程”这条原则,不仅仅可以指导非常细节的编程开发,还能指导更
加上层的架构设计、系统设计等。比如,服务端与客户端之间的“接口”设计、类库的“接
口”设计