设计原则——依赖倒置原则
定义
依赖倒置原则(Dependency Inversion Principle)指:
高层模块不能依赖低层模块,而是大家都依赖于抽象
抽象不能依赖实现,而是实现依赖抽象
这里的核心在于:是高层定义好调用的接口抽象,低层去实现这个接口抽象,是高层决定了低层。而不是低层定义接口,让高层去调用。
这样的好处是,接口是面向业务定义的接口。而如果低层调用接口,很可能会导致接口难以重用。
例子
一个开关的小例子
根据依赖导致原则改进后为:
这里的一个重点是接口的名称为ButtonServer,是从Button角度考虑定义的接口。这样添加各种功能只用继承ButtonServer,并实现接口就好,不用修改Button。
如果从低层Lamp角度考虑,定义的接口更可能叫做LampServer。如果后期Button添加了新功能,可以调用报警器Buzzer了,低层角度定义的接口,那就需要再添加一个BuzzerServer。
扩展这个思想,当前后端有调用交互时,推荐前端定义接口。
框架设计,也是基于依赖倒置原则设计的软件。框架调用业务,而不是业务调用框架。
好莱坞原则,
Don't call me, I'll call you.
也传达了相同的思想。因此,有时依赖倒置原则,也可以称为好莱坞原则。
应用举例
Jave、Python语言中的单元测试框架JUnit、unittest,也是定义好了接口,把test case写好,框架调用自然会调用测试例子。
PS:正在学习《架构师训练营》,学习思考汇总,如有不完善,欢迎探讨
其他,接口隔离作业:https://www.jianshu.com/p/ccf4e9b4ca40
评论