架构师训练营(第 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实现接口CacheOperator和CacheManager,如下图所示,这样就可以达到接口隔离原则的目标了。
参考:https://time.geekbang.org/column/article/177442
版权声明: 本文为 InfoQ 作者【李德政】的原创文章。
原文链接:【http://xie.infoq.cn/article/93514fa1409ba5c08a23f53d3】。文章转载请联系作者。
评论 (1 条评论)