外部设备逻辑在哪里属于域驱动设计?

时间:2014-11-18 11:46:26

标签: architecture domain-driven-design onion-architecture

我正在尝试从更加以域名驱动的角度开发一个新项目,虽然我主要理解这些原则,但有些事情仍然暗示着我。

我的域需要与外部设备进行交互,因此我需要为设备发现,模型创建和范围通信定义接口。

像上面这样的东西属于核心域,或者从域驱动的角度来看,像这样的东西(它帮助我的域但不是我的域本身)完全位于域之外并使用域内定义的行为做工作?

要添加更多信息,我目前的架构建模类似如下:

* Domain (references nothing)
  + IDiscoverDevices (device discovery interface)
    - BeginDiscovery: void
    - EndDiscovery: void
  + IDeviceProvider (factory for device creation)
    - Make: IDevice
  + IDevice

* Framework (references Domain)
  + DiscoverDevices
  + DeviceProvider

* Client (references Domain and Framework)
  + SomeView (takes IDiscoverDevices, IDeviceProvider via ctor)

2 个答案:

答案 0 :(得分:1)

使用Dependency Inversion Principle,您的接口将在域中定义,但它们将在基础架构层中实现。

答案 1 :(得分:0)

如果它有助于您的域名但不属于您的域名,则它不属于核心域名,而是支持子域名的一部分。 通常应该在单独的有界上下文中对不同的子域进行建模。所以你应该至少有两个型号:一个适合你 核心域和一个用于支持子域(外部设备逻辑)。

外部设备逻辑的上下文应该集成在 使用某些转换层的核心域的上下文,例如使用反腐败层。请注意,反腐败层是其中的一部分 核心域上下文因此它应该用核心域的语言抽象外部设备的模型。

这不是一般解决方案,而是假设领域驱动设计真正适用于您的问题,即您的核心域很复杂,有很多业务规则,为您的业务提供竞争优势。如果不是这种情况,你不应该使用DDD,而是使用更简单的东西,例如:使用依赖倒置原则,如plalx在他的回答中提出的。