「架构师训练营」第 2 周作业
作业1:
第一次知道依赖倒置原则是从《大话设计模式》这本书看到的。
A. 高层模块不应该依赖底层模块。两个都应该依赖抽象
B. 抽象不应该依赖细节。细节应该依赖抽象。
—— 《大话设计模式》
就是说要面向抽象编程。
这里涉及了抽象和细节两个概念。在C#中,抽象和细节如下定义。
抽象:接口或者抽象类 —— 可以包含没有实现的元素。
细节:普通类。是要实现具体功能的。
细节是多变的,如果高层直接依赖底层的话,那么底层的变化就导致上层的变化。如果层数多了,只要低层有一点细微的变化,就会水波纹似地传递到最上层,整个系统都要从下往上进行大量的修改。
一般来说,抽象是相对稳定的。只要抽象固定,那么依赖它的模块(无论是高层还是底层)都是稳定的。这样就能支持层内部的横向扩展,不会影响到其他地方,这样的程序架构就是稳定的。
好莱坞原则:
Don't call me, I'll call you.
在好莱坞,演员把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。
在软件开发的领域它还有另外一个名字IoC(控制反转)。
传统的程序开发是上层依赖(调用、指定)下层对象,会有依赖。
IoC是把下层对象的依赖转移到第3方容器,所有组件的初始化和调用都由容器来完成,能够使程序有更好的扩展性。
在我的理解中,依赖倒置是理论基础、指导思想,IoC是实践结果。
作业2:
熟悉框架 —— asp.net core
Asp.net core 的整个架构中,依赖注入框架提供了对象创建和生命周期管理的核心能力,各个组件相互协作,也是有依赖注入框架的能力来实现的。
asp.net core应用在启动以及后续针对请求的处理过程中回依赖各种组件提供服务。为了便于定制,这些组件一般会以接口的形式进行标准化,我们将这些标准化的组件统一成为“服务”。程序启动的时候,会把这些服务注册到容器中。就像好莱坞的演员把简历递交给演艺公司一样。使用的时候,采用依赖注入的方法获取服务,直接使用就可以了。你不需要关心服务是怎样创建的,也不需要关心怎样销毁。
除此之外,我们还可以把asp.net core内置的依赖注入容器换成第3方的容器,例如我们熟悉的Autofac。只要把ServiceProvider换成autofac就行了。由此可见依赖倒置的思想是贯穿真个asp.net core的框架的。
作业3:
作业三提示:
cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
评论