Week 2 作业 01

用户头像
Croesus
关注
发布于: 2020 年 09 月 27 日
  1. 请描述什么是依赖倒置原则(Dependency inversion principle,DIP),为什么有时候依赖倒置原则又被称为好莱坞原则?

好莱坞原则一个重要的文化就是,(You don;t call us, we will call you)。在好莱坞,演员把简历提交给演艺公司后,演艺公司(高层)根据他要开拍的电影,寻找适合的的演员(底层)开拍电影,演艺公司和演员都依赖剧本(抽象接口)。



依赖反转原则的目的是把高层次组件从对低层次组件的依赖中解耦出来,这样使得重用不同层级的组件实现变得可能。把高层组件和低层组件划分到不同的包/库(在这些包/库中拥有定义了高层组件所必须的行为和服务的接口,并且存在高层组件的包)中的方式促进了这种解耦。由于低层组件是对高层组件接口的具体实现,因此低层组件包的编译是依赖于高层组件的,这颠倒了传统的依赖关系。众多的设计模式,比如插件,服务定位器或者依赖反转,则被用来在运行时把指定的低层组件实现提供给高层组件。



应用依赖反转原则同样被认为是应用了适配器模式,例如:高层的类定义了它自己的适配器接口(高层类所依赖的抽象接口)。被适配的对象同样依赖于适配器接口的抽象(这是当然的,因为它实现了这个接口),同时它的实现则可以使用它自身所在低层模块的代码。通过这种方式,高层组件则不依赖于低层组件,因为它(高层组件)仅间接的通过调用适配器接口多态方法使用了低层组件,而这些多态方法则是由被适配对象以及它的低层模块所实现的。



举例:

以Discuz论坛插件(plugin)为例,当论坛管理员需要浏览器Fingerprint来辨识用户的时候,我们根据论坛代码结构的规则,开发一个插件来满足管理员需求。管理员如果变更需求,我们可以通过更换插件或修改插件来完成需求,而不需要更改原本的论坛代码。



https://zh.wikipedia.org/wiki/%E4%BE%9D%E8%B5%96%E5%8F%8D%E8%BD%AC%E5%8E%9F%E5%88%99



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



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





用户头像

Croesus

关注

还未添加个人签名 2019.01.05 加入

还未添加个人简介

评论

发布
暂无评论
Week 2 作业01