1

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

我的领域需要与外部设备交互,因此我需要为设备发现、模型创建和一定程度的通信定义接口。

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

为了添加更多信息,我目前的架构建模如下:

* 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)
4

2 回答 2

1

使用依赖倒置原则,您的接口将在域中定义,但它们将在基础设施层中实现。

于 2014-11-18T13:54:26.037 回答
0

如果它对您的域有所帮助,但本身不属于您的域,则它不是核心域的一部分,而是支持子域的一部分。不同的子域通常应该在单独的有界上下文中建模。因此,您应该至少有两种模型:一种用于您的核心域,另一种用于支持子域(外部设备逻辑)。

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

这当然不是一个通用的解决方案,而是假设领域驱动设计确实适用于您的问题,即您的核心领域很复杂,其中包含许多为您的业务提供竞争优势的业务规则。如果不是这种情况,则不应使用 DDD,而应使用更简单的方法,例如使用 plalx 在他的回答中建议的依赖倒置原则。

于 2014-11-24T21:31:48.547 回答