极客时间第 0 期架构师训练营第二周作业
作业一
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
答:
原则描述:
1. 高层模块不应该依赖低层模块,二者都依赖抽象。
2. 抽象不应该依赖于细节,细节应该依赖于抽象。
解析:
1. 所谓高层模块,是将一个或多个基础服务整合起来,实现某些具体业务流程的模块。
在高层模块不应该直接调用具体的基础服务类,因为这样,意味着具体业务流程需要依赖基础服务,在实际情况中一般是反过来的,业务流程决定基础服务。所以,为了保持扩展性,高层模块和底层基础服务都应该依赖接口或抽象类。
2. 在 Button 控制 Lamp 的例子中,button 如何检测是否被按下,lamp 如何 turnOn 如何 turnOff,这些细节都不是接口或抽象类所关注的事情,而是由具体的类来实现。只要保证在接口或抽象类规定的上下文中,高层模块就能正常运作。
好莱坞原则:
依赖倒置原则是框架设计的核心原则。
框架和工具的区别是:框架设计和实现了一整套流程并抽象了相应的接口,使用者只需要实现相应的接口即可实现相应的需求。
而工具则是一些已经实现了某些功能的类库或服务,使用者需要主动调用它们。
框架可以认为是高层模块,低层模块则是具体的业务功能。框架会自动调用使用者编写好的业务功能。
所以,依赖倒置原则又被称为好莱坞原则(Don't call me, we'll call you)
作业二
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
答:k8s 目前被当作一个容器管理系统在使用,但 k8s 实际上是一个资源调度系统。
k8s 定义好了一系列的接口,允许用户对资源的更新事件作出自定义处理。
另外,docker 容器只是 k8s 实现的可管理资源的一种。k8s 在调用下层容器运行时的过程中,并不直接调用 docker 的 api,而是通过一组叫做 CRI 的 gRPC 的接口来间接执行的。
所有满足 CRI 接口的容器服务都可以当作一类资源被 k8s 调度和管理。
作业三
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
答:
如上图:
应用程序依赖 Cache 接口
system 依赖 Cache 和 reBuilder 接口
appCache 实现了 Cache 接口,并被 Client 关联
systemCache 实现了 Cache 和 Builder 接口,并被 System 关联
评论