架构师训练营 Lesson2-Homework
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
高层模块不依赖低层模块,高层模块定义好需要的接口,低层模块实现接口,在高层模块中使用接口,高层模块的接口在运行期动态注入低层的实现。即为依赖倒置。
我们常在MVC开发框架的Controller层注入Service的接口,以为这就是依赖倒置,通常我们定义的Service接口依然位于Service模块,相对于Controller层的底层模块,因此Controller依赖Service依然是高层依赖底层。我们通常是写好Service然后给Controller调用,这种做法不符合依赖倒置原则。
依赖倒置原则描述的是高层定义接口,低层实现接口,高层会在运行期调用低层实现的接口,这形象的描述了Don't call me,I'll call you。你不要调用(电话)我,我会调用(电话)你,体现了顺序和地位,因此又被成为好莱坞原则。
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
Spring框架的核心是DI容器,容器是组装Bean的地方,Bean可理解为对象实例。Spring是如何实现DI容器的,这个暂先作为
一个学习源码契机,留待后续总结,从郑晔老师的软件设计之美课上,学到DI容器大概是如下机制:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
问题描述:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。
也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
第二周学习心得
第二周学习回顾了面向对象编程思想,设计原则,设计模式
设计原则
SRP单一职责原则
OCP开闭原则
LSP里氏代换原则
ISP接口隔离原则
DIP依赖倒置原则。
设计模式
策略模式
适配器模式
观察者模式
....
各种模式的差异主要体现在多态的运用上。
评论