领域驱动设计:基础设施或存储库可以使用领域对象吗?

Fel*_*tti 4 domain-driven-design

考虑到领域驱动设计,基础设施或系统是否可以使用域的对象(值、实体等),或者是否应该应用依赖倒置,以便基础设施仅依赖于自己定义的接口?

存储库怎么样?它同样适用吗?

是否违反了基础设施、存储库或取决于域的系统代码?

(A) 基础设施依赖于域的示例代码:

namespace Infrastrcuture {
    public class Sender {
        public void Send (Domain.DataValue data) { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

(B) 基础设施不依赖于域的示例代码:

namespace Infrastrcuture {
    public interface ISendableData {
        ...
    }
    public class Sender {
        public void Send (ISendableData data) { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*eth 5

一般来说,如果您的基础设施依赖于您的域,我会说这是可以的。反过来也不是一个好主意。

这样想:什么时候更有可能被取代?基础设施还是领域?

基础设施会随着时间的推移而改变(不同的提供商、不同的服务器……)另一方面,您的域将永远存在

  • 那么,域应该依赖于基础设施的接口,而不是基础设施本身。就像这样,域定义了它需要的接口,然后您提供该接口的实现 (2认同)