【第二周】架构师训练营作业
1. 作业一
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
答:
依赖倒置原则的英文定义:
High-level modules shouldn’t depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn’t depend on details. Details depend on abstractions.
大概意思就是:高层模块(high-level modules)不要依赖低层模块(low-level)。高层模块和低层模块应该通过抽象(abstractions)来互相依赖。除此之外,抽象(abstractions)不要依赖具体实现细节(details),具体实现细节(details)依赖抽象(abstractions)。
依赖倒置原则的核心思想是面向接口编程
“不要给我们打电话,我们会给你打电话(don‘t call us, we‘ll call you)”这是著名的好莱坞原则。
所有的framework都是遵循好莱坞原则设计的,否则就不叫framework。
framework使用IOC的目的:
1.对基于接口编程的支持
2.减少单件和抽象工厂的依赖
3.降低业务和框架的耦合
4.业务组件可复用,可插拔
2. 作业二
请描述一个你熟悉的框架,是如何实现依赖倒置原则的?
答:
在Spring框架当中,依赖倒置原则使用IOC(控制翻转)来实现依赖倒置原则,具体采用的方法也就是依赖注入。在Spring框架当中,所有的对象都是由框架的IOC容器所承载,只要你维护一份对象依赖关系的配置,Spring IOC容器会自动对你代码进行初始化,而不用你自己去在代码初始化时去new一大堆的对象。IOC容器在工作的时候它会从最高层的设计逐步递归往下找依赖关系,到达最底层之后又逐步往上递归去注入对象。
3. 作业三
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
答:
先介绍一下接口隔离原则
接口隔离原则的英文翻译是“ Interface Segregation Principle”,缩写为 ISP。Robert Martin 在 SOLID 原则中是这样定义它的:“Clients should not be forced to depend upon interfaces that they do not use。”直译成中文的话就是:客户端不应该被强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。
针对这个题目,我们可以把缓存接口归到两个接口类中:类CacheOperator包含get、put、delete方法,类CacheManager包含reBuild方法。如下如所示
然后实现客户端操作缓存类CacheOperatorImpl 和缓存管理类CacheManagerImpl,其中CacheOperatorImpl实现接口CacheOperator,CacheManagerImpl实现接口CacheOperator和CacheManager,如下图所示,这样就可以达到接口隔离原则的目标了。
评论