架构师训练营第二周作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置:
a. 高层模块不应该依赖低层模块。二者都应该依赖于抽象。
b. 抽象不应该依赖于细节。细节应该依赖于抽象。
关于 a 的理解:
什么是高层,什么是低层?
低层:不可分割的原子逻辑,定义了实现细节。
高层:对原子逻辑的组装,定义了策略逻辑。
什么是抽象?
就是对策略的抽象,对应到代码中就是接口类。
这里要特别注意一点,在依赖倒置原则下,抽象的定义权在高层而不是低层!
为什么抽象的定义权在高层而不是低层?
因为细节是多变的,而策略更加稳定,抽象的定义权应该放在更加稳定的那一层。
关于 b 的理解:
按照定义,程序中所有的依赖关系应该是依赖于抽象的。
例如:
任何变量都不应该指向具体类。
任何类都不应该从具体类派生。
任何方法都不应该复写基类中已经实现的方法。
注意:这一条并不绝对。例如任何变量都应该指向具体类,但是对于一些 xxxUtil 之类的工具类来说,没有必要再弄一个接口出来。
好莱坞原则与依赖倒置的关系:
好莱坞原则就是"Don't call me, I'll call you." 由于依赖倒置原则将接口的定义权交给了高层,因此遵循了依赖倒置原则,也就遵循了好莱坞原则。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
公司内部使用的一个公共组件 SFRedis,对 Redis 进行了封装,客户端(高层)依赖 ICache 类(抽象),具体逻辑由 RedisCache 类(底层)实现。
RedisCache 类的具体实现逻辑,在 19 年以前,是基于 Jedis 的,在 19 年以后,改成了 lettuce。
由于采用了依赖倒置原则,19 年切换成 lettuce 时,所有的客户端代码都不需要做变动。
关键类图如下:
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
版权声明: 本文为 InfoQ 作者【W_T】的原创文章。
原文链接:【http://xie.infoq.cn/article/1616c55ea2d37c6b854512bde】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论