架构师训练营 Lesson2-Homework

发布于: 2020 年 06 月 17 日
架构师训练营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容器大概是如下机制:

DIContainer container = new DIContainer();
container.bind(ArticleReposistory.class).to(DBArticleRepository.class);
container.bind(ArticleService.class).to(ArticleService.class)
ArticleService service = container.getInstance(ArticleService.class);

请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。

问题描述:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。

也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。

第二周学习心得

第二周学习回顾了面向对象编程思想,设计原则,设计模式

设计原则

  • SRP单一职责原则

  • OCP开闭原则

  • LSP里氏代换原则

  • ISP接口隔离原则

  • DIP依赖倒置原则。

设计模式

  • 策略模式

  • 适配器模式

  • 观察者模式

....

各种模式的差异主要体现在多态的运用上。

用户头像

强哥

关注

这个强哥不太弱 2019.08.06 加入

肚子里的货都在文字里了。

评论

发布
暂无评论
架构师训练营Lesson2-Homework