我正在尝试从更加以域名驱动的角度开发一个新项目,虽然我主要理解这些原则,但有些事情仍然暗示着我。
我的域需要与外部设备进行交互,因此我需要为设备发现,模型创建和范围通信定义接口。
像上面这样的东西属于核心域,或者从域驱动的角度来看,像这样的东西(它帮助我的域但不是我的域本身)完全位于域之外并使用域内定义的行为做工作?
要添加更多信息,我目前的架构建模类似如下:
* 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)
答案 0 :(得分:1)
使用Dependency Inversion Principle,您的接口将在域中定义,但它们将在基础架构层中实现。
答案 1 :(得分:0)
如果它有助于您的域名但不属于您的域名,则它不属于核心域名,而是支持子域名的一部分。 通常应该在单独的有界上下文中对不同的子域进行建模。所以你应该至少有两个型号:一个适合你 核心域和一个用于支持子域(外部设备逻辑)。
外部设备逻辑的上下文应该集成在 使用某些转换层的核心域的上下文,例如使用反腐败层。请注意,反腐败层是其中的一部分 核心域上下文因此它应该用核心域的语言抽象外部设备的模型。
这不是一般解决方案,而是假设领域驱动设计真正适用于您的问题,即您的核心域很复杂,有很多业务规则,为您的业务提供竞争优势。如果不是这种情况,你不应该使用DDD,而是使用更简单的东西,例如:使用依赖倒置原则,如plalx在他的回答中提出的。