写点什么

架构师训练营 -week2 命题作业

用户头像
J.Spring
关注
发布于: 2020 年 06 月 17 日
架构师训练营-week2命题作业

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

Dependence Inversion Principle:依赖倒置原则

依赖倒置原则要求:

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。



1、上层模块不应该依赖底层模块,它们都应该依赖于抽象。

2、抽象不应该依赖于细节,细节应该依赖于抽象



在SpringMVC框架中,模块从上到下依次是Controller层--->Service层--->DAO层,按照依赖倒置原则的要求,上层不能依赖底层,那么是不是Controller就不能依赖Service呢?这不是与我们平时使用矛盾吗?其实不是,后边一句注意是他们都应该依赖于抽象,也就是Controller依赖的并不是Service的实现,而是Service的抽象,也就是接口。Controller定义了依赖的抽象,并不关心依赖的具体实现,但不是说Controller什么都不依赖。这也提现了第二点:抽象接口不依赖于具体细节,细节应该依赖于抽象,比如说Service实现类要实现Service接口抽象。



好莱坞原则:don’t call me ,i will call you

在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。



在软件设计中,高层模块依赖底层模块就像演艺公司依赖演员,但是底层模块对高层模块来讲不应该是强制被依赖的,也就是说当高层模块需要时进行对底层模块的调用,在框架设计中,高层模块对准备好的底层模块比如bean随时可以进行调用,而不是让底层的bean来主动投递到高层模块处使用。



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

比如Spring框架中的ioc是依赖倒置原则的实现,ioc的意思是控制翻转,Spring容器启动时会进行bena的初始化,这跟传统编码中需要时直接new的方式不同,这里的bean不再由客户端去控制而是交给容器或者框架去管理。这也是依赖倒置的一个体现------高层模块不依赖于底层模块,比如bean的创建不再受到客户端的限制,而是由容器(高层)来管理bean。还有就是上边提到的SpringMVC的三层架构依赖方式。

在AOP面向切面编程的思想中,其实也是调用方依赖的是底层或者接受方的接口而不是具体实现。这样以来具体实现怎么样跟上层其实没有直接关联,对系统解耦提供了帮助。



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

作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。



类图如下:



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

J.Spring

关注

努力支撑经历,经历支撑能力! 2018.12.03 加入

追不上BAT的人... 分享,聚焦

评论

发布
暂无评论
架构师训练营-week2命题作业