架构师训练营第 2 周 _ 课后作业

用户头像
方舟勇士
关注
发布于: 2020 年 06 月 17 日



作业一:

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



依赖倒置原则(Dependence Inversion Principle)是软件大师Robert C. Martin提出的软件设计原则,英文原文为:

A. High level modules should not depend upon low level modules. Both should depend upon abstractions.

B. Abstractions should not depend upon details. Details should depend upon abstraction.

A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

B. 抽象不应该依赖于细节,细节应该依赖于抽象。

说起依赖倒置原则,大部分书籍和博客也只看到了字面意思,强调面向接口编程,没有提到接口的所有权归谁所有。我们通常认为低层模块应该拥有它们自己的接口,好让高层模块调用。但是当应用了接口倒置原则时,接口所有权归高层模块。高层模块清楚自己需要什么接口,拥有接口控制权,低层模块只需要按要求实现就好,这就是“倒置”。



至于好莱坞原则,我只是听过 “don't call us, we'll call you”,不知道为什么会有这句话。赶紧看看百度百科上是怎么介绍好莱坞原则的。

“不要给我们打电话,我们会给你打电话(don't call us, we'll call you)”这是著名的好莱坞原则。在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。

好莱坞,一个让许多俊男靓女欲罢不能的地方。在通往成功的路上,有谁不愿意通过捷径而一炮而红,在这之中影视声色是许多人会尝试的方式之一。

不过,好莱坞不是一般的场所,它不是什么阿猫阿狗都可以进入的地方,他们不缺少俊男靓女。因此,如果你有一张俊俏的脸庞,你不要在他们面前显摆,他们不在乎。你可能会说,我的演技非常棒,哦,没用,这样的人在好莱坞遍地都是。

好莱坞原则强调高层对低层的主动作用,即低层应该只管好自己的工作(具体实现),而高层自有它自己的工作(组织低层们开展工作),高层并不太在意低层的变化。



在软件开发中,如果接口所有权归低层所有,低层改变了接口,要通知(Call)高层修改调用方式。如果接口所有权归高层所有,高层改变了接口,要通知(Call)低层修改实现方式。依赖倒置原则和好莱坞原则都强调高层的能力,都是高层通知(Call)低层,或许因为这些相似,才有人把依赖倒置原则称为好莱坞原则。

作业二:

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



框架介绍

WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架。



WPF框架依赖倒置原则应用举例

WPF框架最早使用MVVM模式实现数据驱动UI,WPF的一大基础就是Data Binding。在基于MVVM架构的基础上,只有通过实现INotifyPropertyChanged接口的ViewModel才能够用于Data Binding。位于上层的Binding类要求底层ViewModel或Model对象实现INotifyPropertyChanged接口,才能接收它们属性变更通知,从而更新UI。

作业三:

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



reBuild是非常危险的操作,错误调用 reBuild 方法,可能导致 cache 服务失效。reBuild不是给一般用户使用的,按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法,把reBuild方法从Cache接口中分离出来,放到CacheRebuild接口中,得到新的类图如下。



用户头像

方舟勇士

关注

还未添加个人签名 2018.08.27 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 2 周 _ 课后作业