架构师训练营作业 -Week2
作业一
1、正常情况下依赖是什么样的?
1)把系统分成高层和底层的话,在实现一个业务或一个完整的处理流程时,高层需要使用到底层的能力
2)因为高层需要使用底层的能力,所以高层是依赖底层的,即上层依赖下层,为正向依赖。
2、什么是依赖倒置?
1)依赖倒置简单来说就是依赖关系反向了,不是上层依赖下层,而是下层依赖上层
2)具体实现的过程,是指上层根据业务的需要或实际场景的需要,定义好符合业务场景的接口,然后由下层实现对应的接口
注:实际上,上层和下层依赖的都是定义好的抽象接口,关键点在于这个接口是上层根据自己的需要定义好的,是“我定义你实现 VS 你实现我调用”的区别
3、依赖倒置的好处
1)定义的接口更加符合业务场景
2)减少类之间的耦合,提高系统的稳定性
3)提高代码的可读性、可维护性
4、为什么依赖倒置又被称为好莱坞原则?
1)好莱坞原则是什么?
a.好莱坞原则指“Do not call me, I will call you!”
b.该原则强调高层对低层的主动作用,即低层应该只管好自己的工作,而高层自有它自己的工作,在不需要到某个低层的时候,高层并不会调用到这个具体低层,低层永远不需要向高层作出表示,说它需要被调用(避免向上调用和相互调用)
2)依赖倒置原则和好莱坞原则有什么相同的?
a.从某种程度上来说,好莱坞原则也可以看做是高层定义好了相关的抽象接口,然后低层实现了对应的抽象接口。即低层并不需要关注高层的处理,高层在需要的时候会通过抽象接口调用低层的实现
b.依赖倒置是不是可以看做好莱坞原则的一种实践,具体落地时,好莱坞原则还可以通过回调or模板方法来实现 ??
作业二
通过浏览器访问Web应用的时候,浏览器发给服务端的是一个 HTTP 格式的请求,HTTP 服务器收到这个请求后,会调用具体的服务端程序进行处理。在这一套流程中,上层定义好了一套接口和规范,开发者在开发Web应用的时候,只需要在遵循规范的基础上开发出服务端的业务处理类即可,无需关注HTTP请求的解析、响应,也无需关注HTTP请求与具体服务端处理类的调度关系等,这一切都交由框架做好了。这一套流程中,具体的规范如下:
1、 业务类为了能够处理到HTTP请求,必须实现Servlet 接口
2、实现Servlet的业务类需要注册到Servlet容器中,由Servlet容器将HTTP请求转发给具体的Servlet业务类进行处理
当我们遵循这一套规范时,我们实现的业务类就能够被Servlet容器进行管理,并相应特定URL的HTTP请求
作业三
1、现状
Cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的,类图如下。
2、问题
如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。
3、改进
按照接口隔离原则,不应该强迫客户程序依赖它们不需要的方法。也就是说,使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法,具体如下类图。
评论