写点什么

架构师训练营第二周 - 作业

用户头像
Eric
关注
发布于: 2020 年 06 月 15 日
架构师训练营第二周 - 作业

作业一:

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


依赖倒置原则(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。(如下图)



用户头像

Eric

关注

给写代码的人写代码 2017.10.17 加入

Clojure

评论

发布
暂无评论
架构师训练营第二周 - 作业