架构师训练营 -week2- 作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖于抽象;抽象不能依赖实现,而是实现依赖抽象。其核心思想是面向接口编程。
假设类A依赖于类B,此处类A为高层,类B为低层。后来需改为依赖类C,那么此时则需要修改类A才能达到此目的,但这样做有很大的风险。因此,添加接口I,使类B、类C实现接口I,类A通过接口I与类B或类C发生联系。将原来类A与类B、类C的直接依赖截断,倒置了类A与类B、类C的依赖关系,三者通过接口I产生联系。
如下图:
好莱坞原则:Don’t call us, we’ll call you。
好莱坞原则更多的是在框架设计中体现。接口、抽象类好比参加好莱坞试镜的渠道,实现接口、抽象类则是参加试镜。在需要时,制片人/框架则会通知或调用具体的人/类。
例如各种框架中的接口类,我们会选择通过实现对应的接口类的方式,使框架在调用接口时调用我们的代码;而不是让框架代码直接调用我们定义的代码。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
这题好难,我太弱小了,稍微描述一下在spring框架推荐的编程方式吧。假设一个MVC三层接口的Web项目,有controller、service、dao三层,service层与dao层各自再细分接口层与实现层。
通过在高层模块注入低层模块的接口的方式,实现高层对低层方法的调用。例如在controller中用注解的方式注入service层接口,在service的实现类中用注解方式注入dao层接口,如此逐层注入,避免了依赖具体的实现。
作业三:
请用接口隔离原则优化Cache类的设计,画出优化后的类图。
方法一:
拆分多个子接口分别实现。
方法二:
通过抽象类CacheWrapper实现所有的ICache,后续的子类继承抽象类,并有选择地重写部分方法。
版权声明: 本文为 InfoQ 作者【晓-Michelle】的原创文章。
原文链接:【http://xie.infoq.cn/article/0010a8c81fa577475018a2e60】。未经作者许可,禁止转载。
评论 (1 条评论)