架构师训练营 week2
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则:Dependence Inversion Principle,简称 DIP
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules should not depend upon low level modules. Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:要面向接口编程,不要面向实现编程。
依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。
著名的好莱坞原则:不要给我们打电话,我们会给你打电话(don‘t call us, we‘ll call you)。在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。
Tomcat、Spring 都是基于这个原则设计出来的,应用程序不需要调用Tomcat或者Spring这样的框架,而是框架调用应用程序。而实现这一特性的前提就是应用程序必须实现框架的接口规范,比如实现Servlet接口。
如下的顾客购物的例子,顾客(Customer)只是依赖网点接口(Shop), 接口定义中不需关心是具体哪个网店。因此顾客类 Customer 不管访问什么商店,或者增加新的商店,都不需要修改原有代码。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
框架提供框架核心功能,比如HTTP处理,MVC等,并提供一组接口规范,应用程序只需要遵循接口规范编程,就可以被框架调用。程序使用框架的功能,但是不调用框架的代码,而是实现框架的接口,被框架调用,从而框架有更高的可复用性,被应用于各种软件开发中。
在写Web应用时,肯定会引入类似Tomcat, Jetty等容器运行服务,只要我们实现了Servlet接口,当我们通过访问Tomcat、Jetty等发布的功能时,容器Servlet即可访问到我们实现的功能Servlet。因为Servlet容器是高层模块,Servlet、Filter是高层模块的抽象接口,开发者是低层模块依赖高层抽象接口(Servlet、Filter)。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
考虑到不同需求方的调用情况及避免胖接口的设计,我们对Cache接口进行拆分设计
评论 (1 条评论)