架构师训练营 - 第二周作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则指的是高层模块不能依赖低层模块,高层模块和低层模块应该通过抽象来互相依赖。其核心思想是面向接口编程。所谓高层模块和低层模块的划分,简单来说就是,在调用链上,调用者属于高层,被调用者属于低层。例子:(controller:高层模块;service:低层模块)
根据这个原则,高层模块(比如controller)应该去定义接口,让低层模块(比如service)去实现。这就是实现依赖抽象。 依赖倒置原则又被称为好莱坞原则因为这个特性:Don't call me. I will call you. 就像好莱坞制片人不希望演员打打电话给他,而是他有合适的机会打给演员。高层模块也要有主动权,定义好嘞接口让低层模块去实现。然后有了机会,高层模块就会调用这些定义好的接口里的方法。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
Tomcat 是运行 Java Web 应用程序的容器。我们编写的 Web 应用程序代码只需要部署在 Tomcat 容器下,便可以被 Tomcat 容器调用执行。按照之前的划分原则,Tomcat 就是高层模块,我们编写的 Web 应用程序代码就是低层模块。Tomcat 和应用程序代码之间并没有直接的依赖关系,两者都依赖同一个“抽象”,也就是 Servlet 规范。Servlet 规范不依赖具体的 Tomcat 容器和应用程序的实现细节,而 Tomcat 容器和应用程序依赖 Servlet 规范。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
应用程序可以调用ICache Interface里的方法,但无法调用IReBuild里的reBuild方法。这里,我们通过接口和组合的方法,来确保了接口隔离。外面的系统只能调用到与该系统相关的方法。
评论