写点什么

架构师训练营第 2 周作业

用户头像
在野
关注
发布于: 2020 年 06 月 17 日

作业一

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



依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:要面向接口编程,不要面向实现编程。



依赖倒置原则的主要作用如下:

  • 依赖倒置原则可以降低类间的耦合性。

  • 依赖倒置原则可以提高系统的稳定性。

  • 依赖倒置原则可以减少并行开发引起的风险。

  • 依赖倒置原则可以提高代码的可读性和可维护性。



依赖倒置原则的最佳实践:

  • 每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备。

  • 变量的类型尽量是接口或者抽象类。

  • 任何类都不应该从具体类派生。

  • 尽量不要覆写基类的方法。

  • 结合里氏替换原则使用。



好莱坞原则:别调用我们,我们会调用你。好莱坞原则用在系统的高层组件与底层组件之间。高层组件不应该直接调用底层组件,而是从容器获取。



从概念上来看,好莱坞原则其实是依赖倒置原则在框架设计中的一种技巧。



在典型的3层架构系统中,Controller依赖Service接口,Service依赖Mapper接口,虽然每层都依赖接口,但实际上不符合依赖倒置原则,因为高层接口依赖了底层接口,更好的做法是在每层实现相关的业务Service接口,Controller依赖当层的业务Service接口,而Service层则实现Controller层的业务Service接口,Service层和Mapper层的做法类似。



作业二

  • 请描述一个你熟悉的框架,是如何实现依赖倒置原则的。

说起依赖倒置原则,不得不提Spring的控制反转(Inversion of control)。



在程序中,当我们需要用到其他对象的资源时,就直接通过“new”关键字创建一个对象。这个过程中就容易造成对象关系之间依赖程度较高,导致类之间的耦合度高,不利于组件及代码的重用。对象之间的依赖关系太强,一旦需要更改一个对象所在的类,其他的类对象都需要进行更改,可拓展性不高。



针对这种情况,Spring通过Ioc容器来管理对象,对象之间依赖关系的管理不由具体对象来完成,而是交由Ioc容器来集中管理,并且通过依赖注入将底层依赖对象以参数形式传入上层对象,对象间的依赖关系的管理被反转至IoC容器中。

作业三

请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。

接口隔离原则(ISP:Interface Segregation Principle):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。



根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。



看到这里好像接口隔离原则与单一职责原则是相同的。其实接口隔离原则与单一职责原则的审视角度是不相同的,单一职责原则要求的是类和接口职责单一,注重的是职责,这是业务逻辑上的划分,而接口隔离原则要求接口的方法尽量少



本题从Cache类中的方法可知,可将Cache类分为两部分功能,一部分是关于cache的,一部分是重建Cache的,从而抽象成两个接口,Cacheable接口是关于Cache的操作的,可以对外暴露;CacheBuildable是关于重建Cache的,ConcreteCacheBuilder实现Cache重建,Cache类实现Cacheable接口,继承ConcreteCacheBuilder。



Cache 类设计优化后的类图如下:

参考资料



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

在野

关注

还未添加个人签名 2012.03.11 加入

还未添加个人简介

评论

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