week2- 依赖倒置原则 & 接口隔离原则
作业一:请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则:
程序要依赖于抽象接口,不要依赖于具体实现,高层模块不应该依赖于低层模块,两者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。
依赖倒置原则和好莱坞原则:
"don't call us, we'll call you",和依赖倒置原则中的高层不应该依赖低层,通过实现接口或者注解,低层会找到高层的思想一致。所以依赖倒置原则又被称为好莱坞原则。
作业二:请描述一个你熟悉的框架,是如何实现依赖倒置原则的?
Spring框架中的控制反转(IOC)就是依赖倒置原则(DIP)的具体实现方式。
Spring IOC控制翻转, 即将创建对象的权利交给 IOC, 用户无须在业务代码中手动去 new
对象, 且无须关注这个对象本身的实现, 只需要关注它所支持的接口即可。 这样主程序只依赖了抽象(依赖倒置原则), 即使实现发生了变化, 业务无须做修改。
Spring 还提供了另一种方式: 接口回调注入, 这种方式并不常用, 会造成 Spring 对业务代码的重度侵入。 这种方式可以用来获得 Spring 的内建依赖 (游离对象, 如 BeanFactory
, ApplicationContext
) 或 Bean 的信息。 Spring 中的内建依赖不能被依赖查找, 但是可以被依赖注入。 而接口回调可以在 Spring 启动初期的时候确保业务对象能够获得内建依赖 (依赖注入 (@Autowire
注解) 必须在 BeanPostProcessor
初始化完成后才能实现).
AOP 切面编程也是为了实现高内聚低耦合。 将业务流程中的主要业务和次要业务 (不影响业务流程的) 拆分,核心业务流程只包含主要业务, 次要业务放入切面中。 切面编程可以用来实现纵向业务的代码复用 (继承是横向/同级别业务的代码复用).
作业三:请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
评论