我最近开始探索DDD并计划使用它。我正在寻找DDD的一些说明,我已经为此创建了一个示例问题,并使用DDD设计了一个解决方案,然后提出了一些问题。如果您需要更多详细信息,请仔细检查并恢复。
问题陈述:构建车辆制造站,允许组装不同的零件并创建车辆。
架构风格:域驱动设计(DDD)
域名条款和关系
系统的分层表示
制造站
|
车辆
|
-Car /卡车
|
-Engine (E)
|
|---Petrol/Diesel
|
-Transmission (T)
|
|---Auto/Manual
|
-Wheels (W)
|
|---Tube/Tubeless
|
-Parameters (Could range to millions)
|
|--Speed - E
|--RPM - E
|--Coolant - E
|--Tyre Pressure - W
|--Audio Level
|--RearCameraOn
|--DoorLocked
有界上下文(已识别)
有界上下文详细信息:
有界上下文 - 站
Aggregate Root
o Station
Slots : List<Slot>
Entities
o Slot
o Vehicle : Car/Truck
Value Objects
Repositories
o StationRepository
Services
o SlotService
Events
o VehicleAllocatedToSlot
o VehicleDeallocatedFromSlot
有界上下文 - 车辆
Aggregate Root
o Vehicle : Car/Truck
Parameters: List<Parameter>
Entities
o Registration
o Chassis
Value Objects
o Manufacturer
o Model
o Parameter
Name
Value
Type
Default Value
Unit
o Audio System
Repositories
o VehicleRepository
Services
o AssemblingService
Events
o VehicleCreated
o VehicleDeleted
o VehicleRegistered
o VehicleDeregistered
o AudioSystemAdded
o AudioSystemRemoved
有界上下文 - 引擎
Aggregate Root
o Engine
Parameters: List<Parameter>
Entities
o ElectronicControllingUnit
Value Objects
o Gas Pump
o Valve
o Filter
o Fan
o Parameter
Name
Value
Type
Default Value
Unit
Repositories
o EngineRepository
Services
Events
o EngineCreated
o EngineRemoved
o FilterAdded
o FilterRemoved
o FilterReplaced
o GasPumpAdded
o GasPumpRemoved
o GasPumpReplaced
o FanAdded
o FanRemoved
o FanReplaced
问题:
DRY被违反。我们可以看到&#39;参数&#39;在几乎所有服务中都有定义。
o建议为参数设置单独的Bounded Context / AR吗?在这种情况下,组件(引擎或轮子)是否在其自身内部保留参数ID的列表,或者每个参数是否包含父ID?
客户如何在一次通话中创建一台带引擎,变速箱和4个车轮的汽车?
如何实现不同组件之间的关系?例如,特定发动机如何知道它属于哪辆汽车/卡车?我们如何重建汽车/卡车?
如何使用DDD管理继承深度? o车辆 - &gt;汽车 - &gt;福特/丰田?
如何使用DDD管理深层组合?我们如何压缩聚合?
o Station - &gt;汽车 - &gt;引擎 - &gt;范 - &gt;参数(Fan Sped) - &gt;值
Station.Car.Engine.Fan.Speed
How to retrieve Speed(Parameter) value in other Bounded context
提前致谢!