写点什么

第二周作业

用户头像
Aldaron
关注
发布于: 2020 年 06 月 18 日
第二周作业

作业一:

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



作业二:

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



作业三:

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



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

作业一:依赖倒置与好莱坞原则

依赖倒置原则就是高层次模块并不依赖于低层次模块,反而依赖的是二者的抽象,而抽象不依赖于具体的抽象,而是依赖具体的实现。



为什么依赖倒置被称为好莱坞原则好莱坞原则说的是:Don't call us, we'll call you。

在软件领域也是一种调用关系与比调用关系之间并不是被调用者主动侵入到调用者的实践,反而是调用者定义调用的抽象,被调用者实现调用者的抽象,具体调用者什么时候需要用到就看具体调用者的实现了。而调用者调用时并不需要理解具体实现的细节,是需要按照自己定义的抽象进行调用就好。



作业二:依赖倒置的实现



Golang的网络轮训(Event-Loop)器的实现就是通过依赖倒置实现的在不同平台采用不同的网络I/O库。

网络的I/O模型会有很多种,例如:BIO,NIO,I/O多路复用,AIO等等。

各种I/O模型在不同的操作系统中实现方式都不同,然而Golang 编译的软件需要在各个平台中都能够支持网络的I/O,那么Golang的网络轮训器内部就通过依赖倒置的原则对网络轮训环节进行了抽象。

func netpollinit()
func netpollopen(fd uintptr, pd *pollDesc) int32
func netpoll(delta int64) gList
func netpollBreak()
func netpollIsPollDescriptor(fd uintptr) bool



底层在操作系统具体实现中会通过不同的方式对这些抽象进行实现。例如:Linux操作系统系统中就使用 epoll 来实现的I/O多路复用,而在Mac操作系统中就利用的 kqueue 实现的I/O多路复用。



作业三:接口隔离设计(ISP)





发布于: 2020 年 06 月 18 日阅读数: 54
用户头像

Aldaron

关注

还未添加个人签名 2018.04.28 加入

还未添加个人简介

评论

发布
暂无评论
第二周作业