依赖倒置原则
- 高级模块不应当依赖于低级模块。它们都应当依赖于抽象。
- 抽象不应当依赖于实现,实现应当依赖于抽象。
依赖倒置原则存在的真正意义是指,我们需要将一些对象解耦,它们的耦合关系需要达到当一个对象依赖的对象作出改变时,对象本身不需要更改任何代码。
这样的架构可以实现一种松耦合的状态的系统,因为系统中所有的组件,彼此之间都了解很少或者不需要了解系统中其余组件的具体定义和实现细节。它同时实现了一种可测试和可替换的系统架构,因为在松耦合的系统中,任何组件都可以被提供相同服务的组件所替换。
接口隔离
Clients should not be forced to depend on methods that they do not use.
客户端代码不应当被迫依赖于它们不需要的方法。
它意味着当你在定义你的抽象层代码时,不应当在客户端代码在实现抽象逻辑时,暴露一些客户端代码不需要使用或者关心的方法,接口要保持精简。
通用的接口往往会无意识的将自己和类的实现耦合在了一起,所以你应当尽量的避免这种情况的发生。在设计接口时,你应当时刻提醒自己,我是否需要使用所有在接口中声明的方法呢?如果不是的话,将接口细分为更多个更精简、更具体的接口。
单一职责
Every module or class should have responsibility over a single part of the functionality provided by the software, and that responsibility should be entirely encapsulated by the class.
每一个模块或者类所对应的职责,应对应系统若干功能中的某个单一部分,同时关于该职责的封装都应当通过这个类来完成。
简单的说: