架构师训练营第二周 - 作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则(Dependency Inversion Principle) 是指依赖于抽象,而不是依赖于某个具体的实现。抽象不依赖实现,实现依赖抽象。
高层模块通常需要使用一些低层的模块来实现某个功能,但如果高层模块直接依赖具体的某个实现,那么难以替换成不同的实现。如果高层模块依赖于抽象,那么可以使用实现了这个抽象不同的实现,添加新的实现或者替换原来的实现时高层模块不会受到影响。
框架设计上经常会用到依赖倒置原则,框架使用者不直接调用框架的功能,而是通过实现框架定义的抽象接口,让框架调用来实现业务功能,因此又被称为好莱坞原则。(源于好莱坞经纪人的常用语 Don’t call me, I’ll call you.)
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
Spring 框架大量使用了依赖倒置原则。例如,应用程序通常需要使用各种不同的服务。一种简单的方法是在程序源代码内直接创建所需的服务类,但这样会导致程序依赖于具体服务类的实现。而通过应用依赖倒置原则,需要使用服务的地方依赖于服务的抽象接口,由服务类实现抽象接口,并且将服务对象实例的创建过程委托给 Spring 框架,由 Spring 框架创建服务实例,并通过依赖注入的方式将服务对象连接(wired)到需要使用服务的地方。这样使用服务的代码就不需要关心服务对象时如何创建的,具体的实现类是什么,只需要关心使用服务的功能就可以了。Spring 框架扮演了对象工厂(创建对象)和对象容器(复用对象)的角色。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
原设计中 get, put, delete, reBuild 都放在同一个类中(如下图)。其中 get, put, delete 方法是给应用程序使用的,reBuild 则是保留给系统进行远程调用的,不希望应用程序使用 reBuild 方法,否则会令 cache 失效。
按照接口隔离原则,不应该强迫客户程序依赖它们不需要的方法,可以将 Cache 类的方法通过不同的接口提供,一个接口供客户程序使用,包括 get, put, delete,另一个方法供系统使用,包括 reBuild。(如下图)
评论