依赖倒置原理

问题描述 投票:0回答:1

在此博客中:https://blog.ploeh.dk/2013/12/03/layers-onions-ports-adapters-its-all-the-same/#db5adf784deb4c9b92a656627283c9da.

他们表示,改变域库和数据访问库之间的依赖关系方向将尊重 DIP。为何如此? DIP 的思想不就是松耦合吗?例如,一个库引用另一个库的接口而不是具体的定义?他们引用了端口和适配器或洋葱作为示例,但在我的域将数据发送到存储库的 .NET 项目中,它需要数据访问层的依赖项,因此我认为不可能以不同的方式建立依赖项。

.net domain-driven-design solid-principles dependency-inversion
1个回答
0
投票

是的,DIP 依赖于抽象而不是具体,这确实导致了松散耦合。它还通过允许编译时依赖项指向运行时依赖项的相反方向,“反转”程序中的控制流。

Bob Martin 在很多地方谈到了这个概念,例如在耶鲁大学管理学院的演讲中。

这是我们的模块

M
(可能是一个域模块)。这是我们的模块
N
(可能是存储库模块)。它有一个名为
F
的函数(可能是数据库读取)。 控制流程将从
M
N
调用
F
但是,如果我有多态性,如果我有面向对象的语言...我的
M
模块可以提及接口的名称并使用它来调用
F
N
模块将从该接口派生。

并注意编译时依赖项发生了什么:它指向反对控制流。这就是多态性给你带来的。多态性使您能够创建一个调用另一个模块的模块,并且具有针对控制流而不是控制流的编译时依赖点。

指向控制流的依赖是从

N
到接口的继承依赖。因此,
M
N
都具有指向接口的编译时依赖项,即使运行时依赖项从
M
(域)指向
N
(存储库)。

这个概念的选择性应用定义了依赖倒置原则。

© www.soinside.com 2019 - 2024. All rights reserved.