架构师训练营第二周作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
说依赖倒置之前,先说下依赖。A依赖B,说明A的功能实现上需要使用到B的功能,比如,A是到某地去,那B就是公交车、自行车或驾车。这种依赖是直接依赖,当B修改功能的时,如从自行车转为驾车,则A传入B的参数要响应修改。B的修改会影响到A。
现在A不想受到B实现的影响,怎么办呢?加一层,软件设计常用方法。加的这一层要脱离具体实现,则可使用接口或者抽象类,这两种形式都不是具体实现。
现在B对A的需求是不了解的,那这个抽象层只能A去定义了。
A自己抽象出接口,B去实现。A不再依赖B,B依赖A定义的方法,依赖倒置。
高层功能不应该依赖底层实现,底层实现依赖高层功能。
好莱坞原则:不要调用我,我会来调用你(Don't call me, I will call you)。
底层组件实现高层定义的接口,由高层决定何时调用。体现了高层的主动性和规矩性。
所以依赖倒置原则有时也形象的成为好莱坞原则。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
Netty中,消息处理器。
Netty框架定义了ChannelInboundHandler和ChannelOutboundHandler接口,开发者只需要实现这两个接口并加入到Channel执行Chain中,就可以被框架调用执行业务逻辑。
这里是使用接口来实现的依赖倒置。
Netty中还有一些抽象类,用来实现依赖倒置,如SimpleChannelInboundHandler,使用抽象类可以使框架实现一些通用逻辑,更易于业务开发者使用。
SpringBoot中,实现依赖倒置,使用的是注解。如 @RestController 等。
依赖倒置是一种思想,使上层不依赖底层,而底层依赖上层。
实现的途径可以是接口、抽象层、注解。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
使用两个接口进行隔离,一个接口含有get、put、delete供应用内部使用,一个只含有rebuild供外部重置配置调用使用。
评论