依赖倒置原则 & 类图优化
作业一
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
什么是依赖倒置原则?
传统的程序开发思路是在需要某些功能的时候,会主动调用相应的接口,这样的坏处就会造成主动调用方比较被动。如果依赖方频繁变更会导致已来访频繁修改,这种模式不适合作为架构设计的准则,因为架构应该是稳定的
为了解决架构设计的稳定性问题,引入了依赖倒置策略,框架开发者会开发好完整的框架,定义好框架接口(利用多态),当框架需要某些功能的时候,就直接调用框架定义好的接口,实现框架的启动与运行。依赖倒置的开发思路就由被动转为主动,由“我调用你”转变为“你实现我定义的接口”,这样就发生了依赖倒置
好莱坞原则?
“Do not call us, we will call you”
百度百科:
https://baike.baidu.com/item/%E5%A5%BD%E8%8E%B1%E5%9D%9E%E5%8E%9F%E5%88%99/16019700
这个思路就和依赖倒置原则比较契合,调用发起方(演员)由主动变为被动
总结:
对基于接口编程的支持
减少单件和抽象工厂的依赖
降低业务和框架的耦合
业务组件可复用,可插拔
作业二
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
框架:JUnit
Junit是一个java的单元测试框架,在便携测试用例的时候,只要遵循JUnit定义的规则,JUnit就能够找到相应的测试类的测试方法并执行,从而完成单元测试。从应用调用关系上来讲,JUnit是一个框架。从依赖倒置原则来解释,就是所有的单元测试编写人员并不关注框架是怎么run起来的,只需要填写自己的业务逻辑(测试逻辑)就行。
从表现形式来讲,Junit定义了如下一些注解:
其中在实际的开发过程中使用比较频繁的有@Test,@Before,@BeforeClass,@After,@AfterClass,@FixMethodOrder 等
以@Test注解为例
Test为抽象接口,测试用例通过依赖抽象接口事项依赖倒置
作业三
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
l 类图:
评论