架构师训练营(第 2 周作业)

发布于: 2020 年 06 月 17 日
架构师训练营(第2周作业)

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.业务组件可复用,可插拔

参考:https://time.geekbang.org/column/article/177444

2. 作业二

问题:请描述一个你熟悉的框架,是如何实现依赖倒置原则的

答:

因为我平时用Python多一些,这里介绍一下Tornado的url设计,当启动服务app时,将uri和对应的handler注入给app,当请求发生时,框架会调用对应的handler来处理请求。这个应该是最直观的依赖倒置原则的使用,即由框架来调用业务代码。这个例子可能过于简单了一些,还需要好好学一下依赖倒置原则。

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

参考:https://time.geekbang.org/column/article/177442

发布于: 2020 年 06 月 17 日 阅读数: 14
用户头像

李德政

关注

还未添加个人签名 2017.11.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营(第2周作业)