写点什么

架构师训练营第 0 期 - 第 2 周 - 命题作业

用户头像
关注
发布于: 2020 年 06 月 17 日

作业一:

  • 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

答:

1、依赖倒置原则就是指实现要依赖于抽象的设计原则。说得更直白一些,就是要在实际的开发工作中,先将系统中的角色、模块等对象进行抽象,梳理好它们之间的关系、定义好它们的接口,最后再去填充各个函数内部的实现。而非一上来就从某个具体实现细节开始撸代码,从而导致上层的接口定义被具体实现所影响,一片混乱。

2、依赖倒置原则和好莱坞原则并不能完全等价,我认为题目的表述有问题。个人观点认为好莱坞原则是在依赖倒置的基础上加强了对于调用关系的约定,这样更加便于框架来控制和管理其下的组件。


作业二:

  • 请描述一个你熟悉的框架,是如何实现依赖倒置原则的。

答:

gin 是我常用的 web 服务框架,像常见的大多数 web 框架一样,它也具有 router 功能,我们只需要将 http 请求的路径和 method 的组合绑定到我们编写的 handler 函数上,框架便会在 client 请求时处理好前面的各种逻辑,并调用指定的 handler 函数,而我们只需要关注 handler 的实现即可。

而这个 handler 函数的传参以及返回值就必须严格按照框架约定的结构来编写,否则无法绑定到 router 中。例如在 gin 中,你的 handler 函数的参数列表必须有且只有一个 gin.Context 对象,返回值为空。然后,你就可以在 handler 函数中通过 gin.Context 对象获取 request 内容,并且 response 输出也是通过 gin.Context 对象进行。

又比如,golang 原生的 web server 则要求你的 handler 函数的有且只有 http.ResponseWriter 和 http.Request 两个参数分别作为 https 输入输出的对象,满足这样要求的函数才可以通过 .HandleFunc("路径",函数指针) 的方法进行绑定。

上述这种事先定义好 handler 函数的格式,然后与 router 进行绑定,最后在实际运行中由框架来决定如何调用的形式,便是很常见也很容易想到的一种依赖倒置和好莱坞原则的例子。

作业三:

请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。

作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。


答:


用户头像

关注

还未添加个人签名 2018.09.10 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第0期-第2周-命题作业