架构师训练营第二周作业
一、请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则(DIP,Dependency Inversion Principle):高层模块不依赖于低层模块,高层和低层都依赖于抽象。抽象不依赖于实现细节,而实现细节依赖于抽象。
个人认为,依赖倒置的核心是:高层很明确知道自己需要哪些功能,但又不想局限于实现细节。于是就把做什么和怎么做进行了分离,把做什么定义为抽象,把怎么做定义为实现。高层只关注抽象而不关注实现。因为高层特别关注抽象并且抽象是为高层服务的,离的比较近,同时抽象一般比较稳定,而实现可以有很多种方式不太稳定,于是就把稳定的抽象放到了高层,然不太稳定的低层实现细节,依赖比较稳定的高层抽象。
好莱坞原则:don't call us, we'll call you。假如我们把视角定位在某个抽象接口的某个具体实现上,那么高层什么时候调用我们这个实现,实现本身是不知道的,甚至调用不调用都不知道。
二、请描述一个你熟悉的框架,是如何实现依赖倒置原则的
mybatis框架,通过XML编写SQL语句,然后框架解析并运行这些语句,我认为是服务依赖倒置原则的。
上图中,Mapper是定义的接口,SQL XMl配置文件为接口的具体实现,Service依赖于Mapper而不是SQL具体实现,从逻辑上讲,它们的依赖关系倒置了。
三、请用接口隔离原则优化Cache类的设计,画出优化后的类图。
其中,Cacheable接口是公开接口,其他两个接口为包内可见,客户只需要依赖Cacheable接口就行了,具体实现不用关心
评论