写点什么

架构师训练营第二周作业

用户头像
W_T
关注
发布于: 2020 年 06 月 15 日

作业一:

  • 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?


依赖倒置:

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 类的设计,画出优化后的类图。



发布于: 2020 年 06 月 15 日阅读数: 58
用户头像

W_T

关注

还未添加个人签名 2018.01.09 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二周作业