架构中依赖倒置的几个问题

本文是一篇关于架构师训练营课后习题的文章,主要解答架构中依赖倒置的几个问题。从依赖倒置的定义、常见的框架以及依赖倒置的具体实现案例进行展开,逐步深入理解依赖倒置。

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

依赖倒置原则,即 Dependence Inversion Principle,是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。更通俗地讲,该原则可理解为:A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

好莱坞原则,即不要给我们打电话,我们会给你打电话(don't call us, we'll call you)。在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。

好莱坞原则强调高层对低层的主动作用,即低层应该只管好自己的工作(具体实现),而高层自有它自己的工作(这就是管理低层的逻辑们,或者说从client到具体实现的一系列中间逻辑),在不需要到某个低层的时候,高层并不会调用到这个具体低层,低层永远不需要向高层作出表示,,说它需要被调用,,(即在所有的处于使用者与现有代码的中间的,用于隔离和解偶二者的,那些中间逻辑中,低层逻辑永远不要涉入高层的实现,而只要高层通过某个逻辑去涉入低层的实现,也即低层应不要调用高层,只有高层才会去调用低层,这才是合理的,我们应尽量避免向上调用和相互调用)。

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

从事开发近 10 年以来,大部分是做 .NET 相关的开发,自然而然地,我比较熟悉的框架就是 ASP.NET Core,先看看该框架实现依赖倒置的原理

AspNet Core依赖倒置
AspNet Core依赖倒置

该框架实现依赖倒置原则有很多种方式,实现起来也很简单,如下图:

Asp.Net Core 注册服务
Asp.Net Core 注册服务

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

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

如下图示,接口 ICache 给应用程序调用,接口 ICacheRebuilder 给系统远程调用

Cache 依赖倒置图
Cache 依赖倒置图

《架构中依赖倒置的几个问题》的相关评论

发表评论

必填项已用 * 标记,邮箱地址不会被公开。