架构训练营作业 -20200614
1、请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则
依赖倒置原则的概念可描述为“上层模块不应该依赖底层模块,它们都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象”两句话。
个人理解依赖倒置原则描述的第一方面就是需要在编码时养成面向接口开发的习惯,最典型的就是应用Spring框架的时候,Service层在注入dao层实例的时候,被@Autowired注解的私有成员变量一般会声明dao层对应的接口(例如“IUserDao userDao”);同理Controller层的代码也会注解service层的接口。这样就使上层模块不依赖底层模块的具体实现,而是只依赖一个底层的抽象,可以很大程度上提高代码的灵活性。
第二方面就是对“倒置”的理解。在刚刚接触软件开发的时候,我们在开发时通常会采用“自底向上”的方式,即根据需求首先建立表结构和实体映射关系,然后依次开发DAO层、逻辑层和Controller层的代码。而“依赖倒置”中强调的是“上层模块”依赖“底层模块”的抽象,因此在实际开发的时候,首先开发的顺序是自上而下的,即controller或数据接口代码定义出需要的接口,之后由底层代码对接口进行实现。较之传统的思考方式中上层功能只能使用底层模块提供的功能而言,“依赖”的关系被“倒置”了。“依赖倒置”原则强调的是距离实际需求(通常是实际产品需求)越近的模块提供抽象定义,这样可以更好的满足实际业务的需求,因为代码最终是为实际业务服务的。
而有时候依赖倒置原则又被称为“好莱坞原则”,是源于“don't call me, I'll call you”这样一句话。其本身是制片人、导演等对演员说“我有需要自然会去找你,平时不要来找我”这样的话。在依赖倒置原则中,则描述的是上层通过抽象主动调用下层模块的具体实现,而不需要下层模块思考如何与上层交互,只要实现上层定义好的抽象即可。
2、请描述一个你熟悉的框架,是如何实现依赖倒置原则的
目前在Java项目的开发过程中,已经很少有不依赖Spring框架的工程了。Spring框架提供的IoC等特性,就是一个比较典型的依赖倒置原则的体现。我们在开发的时候只要简单实现Spring框架提供的抽象(如各种注解或配置文件),而不用关心具体的代码实现,就可以享受AOP等特性。而具体的实现上,Spring对AOP提供了注解等极为简洁的抽象,并在容器启动的时候针对实现了该抽象(增加了对应注解)的类通过动态编译生成代理对象,供调用者使用。个人认为这就是一个依赖倒置场景的体现。
就个人的开发经历而言,在刚开始工作的时候接触过一个系统的报表功能的开发。由于需求上需要提供越来越多的报表,每张报表的查询语句、输出字段、表头内容,甚至输出的文件格式可能都不尽相同。因此当时的开发经理首先抽象出了IReport接口,其中包括适配页面查询功能的分页查询函数和适配导出的功能的导出函数。而我们在开发的时候只要实现对应的接口,将分页查询和导出两个函数进行实现即可。个人认为这也算是一个依赖倒置原则的应用场景。
3、请用接口隔离原则优化Cache类的设计,画出优化后的类图
评论