【第二周】命题作业——软件设计原则
1、请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
答:
依赖倒置原则,是指高层模块不依赖低层模块,大家都依赖于抽象;抽象不能依赖实现,而是实现依赖抽象。
个人实践上理解:使用方不依赖于对方的具体实现,依赖的是使用方或使用方上层定义的接口。这样在模块或类层面来看,使用方是不依赖任何具体实现方的,使用方也就不用关心谁来实现和如何实现,只需关心定义的规则即接口就可以,使用方是规则的主导方。
好莱坞原则,是指“Don't call me, I'll call you.”,意思是不要来找我,我会来找你。可以理解为我是主导方,不要告诉我如何做,而是我决定如何做,我会调用你。能比较形象的说明依赖倒置原则,所有依赖倒置原则又被称为好莱坞原则。
2、请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
答:
使用依赖倒置原则的最熟悉的框架就是 Spring 了。依赖注入是 Spring 的一个核心概念,只需要在类属性上声明接口类型,并在上面加上自动注入注解,即可方便的实现依赖注入(框架内部实现跟课程关系不大,不作深入了)。当然,也可以通过主动查找的方法,从 Spring 上下文中去获取接口实现。由于 Spring 框架被普遍使用,依赖注入也就成了依赖倒置原则最常见的一种应用方式。
另一个角度,从容器到框架到业务代码的三者的关系看。容器不依赖框架,框架不依赖业务代码,但是请求的入口在容器,容器会调用 Sevelet(假设为 sevlet 容器)的实现,框架会调用业务 Bean 的方法实现。这里的容器和框架都应用了依赖倒置原则。
3、请用接口隔离原则优化 Cache 类的设计,画出优化后的类图
作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
答:
(假设 rebuild 方法不能分割)
CacheRebuilder 接口暴露给系统远程调用接口
Cache 接口暴露给应用内部
版权声明: 本文为 InfoQ 作者【三尾鱼】的原创文章。
原文链接:【http://xie.infoq.cn/article/00d958a7993373eebf07bb99d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论