架构师训练营 -week02 作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
作业一:
依赖倒置原则(Dependence Inversion Principle,简称DIP)
核心思想:高层模块不应该依赖底层模块,二者都该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象;
说明:高层模块就是调用端,低层模块就是具体实现类。抽象就是指接口或抽象类。细节就是实现类。
通俗来讲: 依赖倒置原则的本质就是通过抽象(接口或抽象类)使个各类或模块的实现彼此独立,互不影响,实现模块间的松耦合。
问题描述: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。
解决方案: 将类A修改为依赖接口interface,类B和类C各自实现接口interface,类A通过接口interface间接与类B或者类C发生联系,则会大大降低修改类A的几率。
好处:依赖倒置的好处在小型项目中很难体现出来。但在大中型项目中可以减少需求变化引起的工作量。使并行开发更友好。
依赖倒置原则教我们尽量避免使用具体类,多使用抽象。
而好莱坞原则是用在创建框架或组件上的一种技巧,好让低层组件能够被挂钩进计算中,而且又不会让高层组件依赖低层组件。这两个的目标都是在于解耦,但是依赖倒置原则更加注重如何在设计中避免依赖。
好莱坞原则教我们一个技巧,创建一个有弹性的设计,允许低层结构能够互相操作,而又防止其他类太过依赖它们。
作业二:
spring就是依赖倒置思想的落地实现,依赖倒置降低依赖,就是建立在面向接口编程带来的可以方便切换实现类而程序其他地方感知不强烈这一优点上。
Spring的核心IOC,其实本质上就是一个容器,而这个容器里面都是管理的一个个JAVA类,和本质上是面向接口编程的依赖倒置思想扯不上什么直接关系。之所以说Spring是依赖倒置思想的落地实现是因为Spring的核心——IOC,就是在整个思想落地实现过程中为了解决某些问题而设计出来的一个组件。
虽然Spring的设计理念和依赖倒置思想没有直接关系,但是确实是因为有了依赖倒置思想的落地实现过程才诞生了Spring,其实真正和依赖倒置思想面向接口解耦这一逻辑直接相关的是现在Spring体系中常用的分层逻辑——controller、service+Impl、Mapper(如果是其他持久化框架,此处就是其他类型的dao,此处以mapper为例)。controller、service+Impl、Mapper层层之间的依赖关系是严格按照依赖倒置思想来落地实现的。
作业三:
版权声明: 本文为 InfoQ 作者【GunShotPanda】的原创文章。
原文链接:【http://xie.infoq.cn/article/64a54c30e662a487b6a7ee306】。未经作者许可,禁止转载。
评论