在 DDD 中:你应该将相似的命令组合成一个命令吗?

In DDD: should you combine similar commands into one command?

我目前正在尝试将领域驱动设计应用到我正在从事的项目中,我注意到有些命令是相似的,只是在为每个命令执行业务验证的方式上存在一些小差异。举个例子,假设我有这三个命令:

ShipCar Command

ShipMotorcycle Command

ShipTruck Command

您认为将上述所有命令组合成以下命令并将车辆类型作为参数是否明智?

ShipVehicle(VehicleType) command

我们在命名命令时应该多明确?我是否将类似的命令合并为一个,从而为失败做好了准备?

两种方式都可以。您也可以通过同时拥有这两个概念来做到这一点。具有派生自 class 或实现接口 ShipVehicleCommand 的具体 ShiMotorcycleCommand 可能很有用。这取决于您的 和实施的要求。

因为 DDD 鼓励您在系统的 领域 中建模,您应该使用您和您的 领域专家 使用来推导您的概念。

如果您的 概括了这些概念并更多地使用了 Vehicle 的概念,而不是使用更具体的概念,例如 汽车卡车摩托车,使用ShipVehicle。如果没有,请改用 ShipCarShipTruckShipMotorcycle

使用您的来指导您。

如果在实施过程中您确实发现有一个通用概念很有用,那么请添加它。如果您认为它不会带来任何价值并混淆了系统,请不要这样做。如果你有一个,但它确实扰乱了你的系统,请将其删除。

DDD 鼓励使用迭代(敏捷)流程和重构,以便在您发现和了解更多有关模型时更改您的模型。从您的 开始,看看它能给您带来什么。

当我开始使用 DDD 时,我注意到的一件事是,作为一个了解设计模式和架构的开发人员,我倾向于从一开始就抽象 a-lot。当我停下来开始更多地思考我领域的具体概念时,建模开始变得容易得多。现在,当我了解有关 domainsystem.

的更多信息时,我会进行概括和抽象