架构师训练营第二周作业
1.请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置包括两点:
1.高层模块不应该依赖底层模块,两者都应该依赖抽象接口。
2.抽象接口不应该依赖实现,实现应该依赖抽象接口。
好莱坞原则表面意思是你(演员)不要来找我,我(电影公司)会主动找你。我(电影公司)在这里可以类比为指高级模块,你(演员)可以类比为底层模块。这里我觉得有逻辑缺失不是很好理解,因为高级模块是如何感知到底层模块的没有描述,用好莱坞的例子可以理解为演员经纪公司(即抽象接口),这样逻辑就通顺了,电影公司不应该依赖具体的演员,而是依赖演员经纪公司(即抽象接口)来找到演员(即底层模块),而且演员依赖演员经纪公司,而不是反过来,这点也同样体现了依赖倒置的第二点。好莱坞原则为了表达简单,中间省掉了抽象接口这个逻辑,这是我的理解,不知道是否正确,欢迎大家的讨论。
因此,好莱坞原则是符合依赖倒置原则的,但是我觉得两者不是一个概念,好莱坞原则强调的是控制反转IOC,不通过程序员控制程序执行的流程,而是通过框架来控制。依赖倒置原则强调的是模块之间依赖的关系,好莱坞原则强调的是模块执行流程的控制的反转。
最后提一点,老师上课没明说的,如何区分高层模块和底层模块:高层模块和底层模块是调用和被调用的关系,调用方是高层模块,被调用方是底层模块。
2.请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
依赖倒置原则通常是用来指导设计框架的,比如常用的一个例子Tomcat容器和Web程序,Tomcat不依赖Web程序的代码,Web程序也不依赖Tomcat的代码,但是两者都依赖Servlet的规范(满足依赖倒置第一点),Servlet也不依赖Tomcat和Web程序的实现,而是两者依赖Servlet的规范(满足依赖倒置第二点)。
还有一般支持插件的框架都实现了依赖倒置原则,具体为定义一个插件接口,里面有需要实现的方法,你自己把逻辑填充到接口方法里,例如soul网关的自定义插件实现逻辑。
3.请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
根据接口分离原则,分离为Cacheable和Rebuildable接口,关注缓存读写删除功能的使用把对象声明为Cacheable,关注缓存管理重建功能的把对象声明为Rebuildable,但是对应的实例都是Cache类型。
Cache通过CacheFatory来构建内部的缓存实现。
新增的Cache类型可以通过CacheFatory工厂扩展。
Cache类型内部持有Cacheable类型的缓存实例,使用了策略模式,这样在实际缓存修改时无需修改Cache。
评论