架构师训练营 第二周 作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则(DIP,Dependency Inversion Principle)是指高层模块不能依赖低层模块,而是都依赖于抽象,抽象不能依赖实现,而是实现依赖抽象。DIP的关键在于抽象属于哪一层,不是说接口放在哪一层就是属于哪一层,而是要考虑这个接口是为谁定义的。例如,在领域驱动设计中强调领域层是最高层,基础设施层依赖于领域层,那么领域层在定义接口时是面向业务领域的,如定义一个仓储接口,它包含了面向领域对象的查询、保存等方法,而具体的基础实施层是用关系型数据库、内存、文件、还是网络等都没有关系,只要实现领域层定义的接口即可。这样设计的好处在于使得软件可以层次化,由高层决定低层,使得高层代码更加内聚且可以被重用。
有时候依赖倒置原则被称为好莱坞原则,是因为接口的定义方会决定何时调用接口实现方,即 Don't call me, I'll call you.
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
例如Spring框架中定义Bean的生命周期接口,该接口由Spring根据Bean的生命周期变定义的,使用方需实现特定的接口,而Spring在对应的时机调起该实现。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
设计了两个接口,Cache接口包含put get delete方法,给应用程序使用;CacheRefreshable包含rebuild方法,给远程系统调用。其中假设一个实现类HashMapCache使用了Map存储对象,实现了着两个接口。
评论