训练营 - 第二周 - 作业一
依赖反转原则
Dependency Inversion Principle - DIP
依赖反转主要目的在于解耦,高层模块针对具体业务进行抽象,低层模块在高层模块抽象的基础上进行实现。最终达到高层模块不依赖于低层模块的目的。
具体而言,首先,高层、低层模块之间不能互相依赖,两者依赖于抽象接口;其次,具体实现依赖于抽象接口。
通过依赖反转原则,高层、低层之间解耦,可以简单方便地对组件进行替换。
不采用依赖反转,UML 图如下
采用依赖反转,UML 图如下
低层实现类 Lower_0 Lower_1 可以方便的进行替换。
好莱坞原则
do not call us, we will call you.
好莱坞原则和依赖反转原则本质上是一样的,都是在阐述高层、低层之间的关系。
拿 Spring 容器举例,容器控制程序之间的关系,而不是传统实现中,代码直接操控。
容器控制对象的创建,把对象联系起来;控制权从代码转移到容器,这就是反转。
编程时,我们只需要写好注解,容器就会按照规则进行装配。
总结
依赖反转、好莱坞原则是软件工程的核心原则,用好这 2 个原则,我们才能编写出高内聚、低耦合的代码。
如果我们要编写框架,需要考虑清楚哪些是高层、哪些是底层,为底层准备好抽象,同时不要暴露非必要的方法给底层,这样编写的框架才会是健壮的。
Cache 类设计
cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
评论