写点什么

训练营 - 第二周 - 作业一

用户头像
行者
关注
发布于: 2020 年 09 月 27 日

依赖反转原则

Dependency Inversion Principle - DIP

依赖反转主要目的在于解耦,高层模块针对具体业务进行抽象,低层模块在高层模块抽象的基础上进行实现。最终达到高层模块不依赖于低层模块的目的。


具体而言,首先,高层、低层模块之间不能互相依赖,两者依赖于抽象接口;其次,具体实现依赖于抽象接口。


通过依赖反转原则,高层、低层之间解耦,可以简单方便地对组件进行替换。


不采用依赖反转,UML 图如下

采用依赖反转,UML 图如下

低层实现类 Lower_0 Lower_1 可以方便的进行替换。

好莱坞原则

do not call us, we will call you.

好莱坞原则和依赖反转原则本质上是一样的,都是在阐述高层、低层之间的关系。


拿 Spring 容器举例,容器控制程序之间的关系,而不是传统实现中,代码直接操控。


容器控制对象的创建,把对象联系起来;控制权从代码转移到容器,这就是反转。

@Service@Autowired
复制代码

编程时,我们只需要写好注解,容器就会按照规则进行装配。

总结

依赖反转、好莱坞原则是软件工程的核心原则,用好这 2 个原则,我们才能编写出高内聚、低耦合的代码。


如果我们要编写框架,需要考虑清楚哪些是高层、哪些是底层,为底层准备好抽象,同时不要暴露非必要的方法给底层,这样编写的框架才会是健壮的。

Cache 类设计

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

使用多继承方式


用户头像

行者

关注

还未添加个人签名 2018.03.09 加入

还未添加个人简介

评论

发布
暂无评论
训练营-第二周-作业一