架构师训练营 - 第二周作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则主要为了解决高层组件对于低层次组件的耦合,使得在未来的需求变动的过程中,能够做好对扩展开放,对修改封闭,并且重用不同层级的组件。其规定如下:
高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。
抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口。
举例说明 :
假如我们现在需要设计一辆汽车,如果我们先设计轮子,再根据轮子设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这样出现的依赖关系如下:
即汽车依赖于车身,车身依赖于底盘,底层依赖于轮子,出现了高层次模块(汽车)依赖于低层次模块(车身)。这样使得整个设计可维护变得很低。如果有一天老板说需要将轮子改大一圈,那么根据上面的依赖关系,所有高层组件都得进行重新设计。而基于依赖倒置原则的思想,我们可做如下设计:首先我们根据汽车的样子来设计车身,然后根据车身来设计底盘,最后根据底盘来设计轮子,使得依赖关系实现翻转,即轮子依赖底盘,底盘依赖车身,车身依赖汽车。如下图:
如上的依赖关系,假若老板说需要将轮子改大一圈,我们只需改动轮子的设计,而无需再改动底盘、车身、汽车的设计。
好莱坞原则:不要给我们打电话,我们会给你打电话(don't call us, we'll call you)。而依赖倒置的原则基本思想其实就是不用来调用我,让我来调用你,跟好莱坞原则思想一致,所以依赖倒置原则又被成好莱坞原则。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
在Spring框架当中,依赖倒置原则使用IOC(控制翻转)来实现依赖倒置原则,具体采用的方法也就是依赖注入。在Spring框架当中,所有的对象都是由框架的IOC容器所承载,只要你维护一份对象依赖关系的配置,Spring IOC容器会自动对你代码进行初始化,而不用你自己去在代码初始化时去new一大堆的对象。IOC容器在工作的时候它会从最高层的设计逐步递归往下找依赖关系,到达最底层之后又逐步往上递归去注入对象。以作业一汽车的设计为例,如下图所示:
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
优化后的类图如下:
版权声明: 本文为 InfoQ 作者【坂田吴奇隆】的原创文章。
原文链接:【http://xie.infoq.cn/article/294fd3647cd37f66398ca7a42】。文章转载请联系作者。
评论