架构师课程第二周作业
一、课堂作业
1. 请描述什么是依赖倒置原则,为什么有的时候依赖倒置原则又被称为好莱坞原则?
高层模块不应该依赖底层模块,它们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。在一个上下依赖的设计模式中,将底层模块或者细节部分抽象出来,大家都去依赖抽象,不要直接依赖。
好莱坞原则:“不要给我打电话,我会给你打电话。” 梦想进入好莱坞的人们,你们不要找好莱坞。那怎么办呢?答案是,让好莱坞来找你!在依赖倒置原则中,高层定义接口,由底层来实现,应用程序不要调用框架,框架会调用应用程序。所以好莱坞原则与依赖倒置原则有相通的地方。
2. 请描述一个你熟悉的框架,是如何实现依赖倒置原则的?
在Django框架,也被称为MTV框架,模型(Model)、模板(Template)和视图(Views)。M层会定义一系列数据存取的类,由V和T层去调用实现具体的功能,M层也是根据定义的接口自动实现了数据存取结构和方式,所以M、T、V层都依赖M层定义的接口实现各自的功能。另外,在Control中,框架调用自定义的url控制,并自行调用相关的模块去处理业务,也是依赖倒置的一部分。
3. 请用接口隔离原则优化Cache类的设计,画出优化后的类图
优化后的类图:
二、总结
本周主要内容是软件设计的5大原则:
1. 开闭原则:对扩展开放,对修改关闭。
2. 依赖倒置原则:高层模块不依赖底层模块,而是大家都依赖抽象;实现依赖抽象,抽象不依赖实现。
3. 里氏替换原则:能用父类的地方,一定可以用子类替代。
4. 单一职责原则:一个类只有一个引起它变化的原因。
5. 接口隔离原则:不应该将应用不需要的接口暴露给应用类。
理解这些原则固然重要,但是更重要的是知道这些原则所要解决的问题、达到的目的。目的自然是设计出高内聚、低耦合的系统。掌握了这些原则以及设计模式的内涵,才能明白我们遵循这些模式所设计出来的系统的美。对于软件工程系统,也和我们其它各种系统一样,都要遵循一定的准则行事,否则当系统复杂变大的时候,对系统的任何动作都无法评估影响。而软件系统更是在一个虚拟的系统设计中,更容易忽视设计系统时候遵循的原则。
老师讲的这些原则大体之前都听说过,但是我还是在课程当中没有完全明白,只有课后多看几次、上网搜索一些资源进行弥补。老师的课后答疑相信对大部分人都是有利的,所以希望可以制定一些原则,长期执行,谢谢。
评论