认识依赖倒置原则(DIP)

用户头像
王友
关注
发布于: 2020 年 06 月 14 日
认识依赖倒置原则(DIP)

1. 写在最前面

极客大学的架构师训练营开营第二周,周四的课程引发了学员的激烈讨论,让人印象深刻。关于架构师成长之路是应该先实战还是先领悟架构之道,我觉得要因人而异。对于经验尚浅的同学只有学习了解了相关工具,明确其使用的方法与目的,在实战的磨炼中感悟;对于对经验丰富遇到上升瓶颈的同学则可以静下心来,思考一下架构的本质,回溯本源,重塑架构思维,构建架构知识体系。

什么是软件架构?

软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

——李智慧老师

什么是架构师?

架构师是做架构设计、对系统架构负责的人;架构师是帽子而非椅子;架构师是角色而非职位

——李智慧老师

2. 编程语言的实质

编程的目的:用计算机来解决现实世界的问题

编程的过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系

编程语言:是一种“抽象”的机制,问题是对“谁”来抽象:

3. 第二周作业

3.1 作业一:描述DIP

作业一:

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



依赖倒置原则也叫依赖反转原则,英文全称是Dependency Inversion Principle简写为DIP。具体是什么意思呢?我们看一下其英文的描述:

  • High-level modules shouldn't depend on low-level modules.

  • 高层模块不依赖于低层模块

  • Both modules should depend on abstractions.

  • 高层模块和低层模块都应该依赖于抽象(高层<-抽象->低层

  • In addition, abstractions shouldn't depend on details.

  • 抽象不应依赖于细节

  • Details depend on abstractions.

  • 细节依赖于抽象



上述描述稍微还是有些绕,这里的高层低层是针对调用关系来说的,在一个调用关系中,调用者就是高层被调用者就是低层该原则主要是对框架层面的设计指导,在平时的业务开发中,大多情况都是高层依赖低层的,而且也没有什么问题。但是在业务开发中,如果可以通过业务抽象业务接口,服务层实现业务接口,这样就可以通过调用抽象的业务接口而不用关心业务的具体实现来完成其业务功能,业务逻辑结构也会更加清晰,同时抽象的业务接口也可以有更好地复用与业务扩展。



好莱坞原则:Don't call me, I'll call you.

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



好莱坞原则,强调了高层对低层的主动作用,即低层只需要关注自己的工作(实现细节),不要去要求高层调用自己,同时也不要去调用高层。

3.2 作业二:描述一个熟悉的框架是如何实现DIP原则的

作业二:

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

我们开发web应用程序部署在容器上,然后我们就可以访问我们的服务。在这里应用容器就是高层,我们的应用程序是低层,容器和应用程序之间没有直接的依赖关系,我们的应用程序可以部署在Tomcat上,也可以部署在Weblogic上,并没有太大区别,这里应用程序和容器就是通过其共同的抽象——Sevlet 规范进行关联,我们开发时不用关心容器如何调用,容器也不关心应用程序的实现。

3.3 使用接口隔离原则优化 Cache 类的设计

作业三:

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

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



  • 这里将远程服务调用的能力封装在manage包中

  • 应用程序仅可以访问core包中的接口,这样就可以避免应用程序误触发reBuild()方法的风险

  • 为了让Cache能够支持不同的模式,这里抽象出了的Config接口,Config接口提供了生成Cachebuild()方法

用户头像

王友

关注

懒是一种艺术 2018.03.26 加入

间歇性自律,持续性懒散,真的很懒!

评论

发布
暂无评论
认识依赖倒置原则(DIP)