写点什么

【week02】作业

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

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

依赖倒置原则是指一种特定的解耦(传统的依赖关系创建在高层次之上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖与敌层次模块的实现细节,依赖关系被反转,从而使得低层次模块依赖于高层次模块的需求抽象。

该原则规定:

1.      高层次的模块不应该依赖于低层次的模块,两者应该依赖于抽象接口

2.      抽象接口不应该依赖于具体的实现,而具体的实现则应该依赖于抽象接口

 

好莱坞原则:don’t call us,we will call you。

就是在架构设计中,架构定义一系列规约,组件实现规约即可。由框架来初始化组件和调用组件实现的接口,而不是组件来调用框架的api。这里体现的是ioc,控制的反转或者说依赖的反转。



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

在.NET Core中DI的核心分为两个组件:IServiceCollection和 IServiceProvider。

IServiceCollection 负责注册

IServiceProvider 负责提供实例

通过默认的 ServiceCollection(在Microsoft.Extensions.DependencyInjection命名空间下)有三个方法:

var serviceCollection = new ServiceCollection()

.AddTransient<ILoginService, EFLoginService>()

.AddSingleton<ILoginService, EFLoginService>()

.AddScoped<ILoginService, EFLoginService>();



我们上面的AddTransient、AddSignletone和Scoped方法是IServiceCollection的扩展方法, 都是往这个List里面添加ServiceDescriptor。



  • Transient: 每一次GetService都会创建一个新的实例

  • Scoped:  在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)

  • Singleton :整个应用程序生命周期以内只创建一个实例 



例如在编写IndexModel:PageModel模块时,依赖于一个TestDependency,那这里需要定义一个ITestDependency接口,同时在IndexModel类的构造方法里声明参数 ITestDependency itd;这样IndexModel不需要知道这个接口的实现细节,只需要按照根据业务需要定义和使用这个接口。这个接口的实现例如为MyTestDependency : ITestDependency,同时在系统的startup的configureServices里这个实现类加入services里(或者用配置文件的方式)。那么容器就会自动组装IndexModel



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



如上图所述,CacheUser依赖于接口ICacheClient,其中包含get,put,delete方法,另外一个接口ICacheBuilder定义了reBuild方法。而实现类CacheClient实现了这两个接口。这样在CacheUser中使用接口ICacheClient,从而实现了对reBuild方法的隔离

用户头像

chengjing

关注

程靖 2018.06.06 加入

还未添加个人简介

评论

发布
暂无评论
【week02】作业