Week 02- 作业:设计原则

用户头像
dean
关注
发布于: 2020 年 06 月 17 日

作业一:依赖倒置

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

依赖倒置原则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.



高层模块(high-level modules)不要依赖低层模块(low-level),应该通过抽象(abstractions)来相互依赖。

抽象(abstractions)不要依赖具体实现细节(details),具体实现细节(details)依赖抽象(abstractions)。



从定义上来看,包含三个元素,高层模块、低层模块、抽象。元素之间的关系应该如下:

以抽象(抽象类/接口)定义行为,低层模块继承/实现抽象(包含具体细节),高层模块依赖抽象(组合/聚合)。

以下图来说,在不使用DIP原则时,【用户】直接依赖【APP订餐】,也可以实现功能,但同时存在PC网络订餐的需求,直接依赖会导致业务耦合过重。使用DIP原则+策略模式,就可以初步进行业务的隔离(包括代码的隔离)。



至此,再回到概念本身【依赖倒置】,这个倒置要怎么理解?我只是在高层模块和底层模块中间引入了抽象,高层还是高层,低层还是低层?个人理解如下:

引入抽象之前,从某种程度上来说,高层要依赖低层提供的方法才能够完成具体的业务;

引入抽象之后,高层摆脱了对低层的依赖,需要什么自己来调用,不关心低层的细节;

二者的关系有了一个倒置/反转,籍于此种理解,个人更喜欢【依赖反转】这个叫法。



从以上描述中不难看出,高层模块想使用哪个功能(低层模块中的具体细节),由其自己决定,低层模块只负责实现细节--->这正是好莱坞原则(Hollywood Principle):don't call me ,i'll call you 的核心思想,因此有时候依赖反转原则又被称为好莱坞原则。



作业二:框架描述

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

以在IIS(Internet Information Services)下部署.net frameworks Web应用为例:

IIS是部署 Web 应用程序的容器。 Web 应用程序只需要部署在 IIS下,便可以被 IIS容器调用执行。以DIP原则划分,IIS就是高层模块, Web 应用程序代码就是低层模块。IIS和应用程序代码之间并没有直接的依赖关系,两者都依赖同一个“抽象”,也就是 Httpcontext(有点不太确定)。Httpcontext规范不依赖具体的 IIS容器和应用程序的实现细节,而 IIS容器和应用程序依赖 Httpcontext规范。



作业三:Cache类图

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



发布于: 2020 年 06 月 17 日 阅读数: 37
用户头像

dean

关注

还未添加个人签名 2019.11.06 加入

还未添加个人简介

评论

发布
暂无评论
Week 02- 作业:设计原则