【第二周】架构师训练营作业

用户头像
星星
关注
发布于: 2020 年 06 月 17 日



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实现接口CacheOperatorCacheManager,如下图所示,这样就可以达到接口隔离原则的目标了。





用户头像

星星

关注

还未添加个人签名 2018.08.06 加入

还未添加个人简介

评论

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