架构师训练营第二周命题作业

用户头像
平淡人生
关注
发布于: 2020 年 06 月 17 日

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

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。具体为一下两点:

A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

B.抽象不应该依赖于具体,具体应该依赖于抽象。

依赖倒置原则教我们尽量避免使用具体类,而多使用抽象。而好莱坞原则是用在创建框架或组件上的一种技巧,好让低层组件能够被挂钩进计算中,而且又不会让高层组件依赖低层组件。两这个的目标都是在于解耦,但是依赖倒置原则更加注重如何在设计中避免依赖。好莱坞原则教我们一个技巧,创建一个有弹性的设计,允许低层结构能够互相操作,而又防止其他类太过依赖它们。



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

Spring的依赖倒置原则的落地实现主要是Spring IOC。pring的核心IOC,其实本质上就是一个容器,而这个容器里面都是管理的一个个JAVA类,和本质上是面向接口编程的依赖倒置思想扯不上什么直接关系。但为什么笔者明明知道这个结论一眼下去看似是错的还要这样说喃?其实之所以说Spring是依赖倒置思想的落地实现是因为Spring的核心——IOC,就是在整个思想落地实现过程中为了解决某些问题而设计出来的一个组件。

虽然Spring的设计理念和依赖倒置思想没有直接关系,但是确实是因为有了依赖倒置思想的落地实现过程才诞生了Spring!!!其实真正和依赖倒置思想面向接口解耦这一逻辑直接相关的是现在Spring体系中常用的分层逻辑——controller、service+Impl、Mapper(如果是其他持久化框架,此处就是其他类型的dao,此处以mapper为例)。

做过spring体系开发的读者应该很快就能理解到笔者上面说的话,controller、service+Impl、Mapper层层之间的依赖关系是严格按照依赖倒置思想来落地实现的。

读到此处很多很多读者也许会问,这里也没有spring什么事情啊,我不用spring,在controller中直接new  serviceImpl也可以啊。

那我们为什么要设计出Spring?它在整个依赖倒置思想落地实现的过程中的作用到底是什么?

好的,下面三张图来解释两个问题,弄懂了这两个问题也就彻底明白了现在流行的分层,原因到底是什么?Spring到底为什么被设计出来。就会彻底明白Spring和解耦之间的关系!

1、为什么要用service+Impl,而不直接使用Impl?

2、Spring到底是为了什么而设计出来的?

图一:直接依赖于impl





图二:依赖于service



图三:Spring容器介入



解释三张图:

图1:①依赖度太高,不便于切换。②自己去new,内存管理混乱

图2:①采用依赖倒置的思想,降低依赖度,切换方便。②内存管理依旧混乱。

图3:面向接口、降低依赖;容器介入,管理内存。



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



用户头像

平淡人生

关注

还未添加个人签名 2018.11.05 加入

还未添加个人简介

评论

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