我目前正在尝试将领域驱动的设计应用于我正在研究的项目,并且我注意到某些命令是相似的,只是每个命令执行业务验证的方式略有不同。举个例子,假设我有以下三个命令:
ShipCar Command
ShipMotorcycle Command
ShipTruck Command
您认为将以上所有命令组合成以下内容并将车辆类型作为参数是否明智?
ShipVehicle(VehicleType) command
我们在命令命名中应该有多明确?通过将类似的命令组合成一个命令,我是否会使自己失败?
答案 0 :(得分:2)
您可以同时使用两种方法。您也可以通过同时拥有两个概念来做到这一点。具有从类派生或实现接口ShiMotorcycleCommand
的具体ShipVehicleCommand
可能很有用。这取决于您的域和实施的要求。
由于DDD鼓励您在系统的域中进行建模,因此您应使用您和您的域专家使用的通用语言得出您的概念。
如果您的域概括了这些概念,并使用了 Vehicle 的概念,而不是使用了更具体的概念,例如 Car , Truck 和摩托车,请使用ShipVehicle
。如果不是,请改用ShipCar
,ShipTruck
和ShipMotorcycle
。
使用您的域指导您。
如果在实施过程中发现有一个一般概念很有用,请添加它。如果您不认为它带来任何价值并弄乱了系统,那就不要。如果您有一个,并且确实使您的系统混乱,请将其删除。
DDD鼓励您在发现和了解更多有关模型的过程中使用迭代(敏捷)过程进行重构以更改模型。从您的域开始,看看它可以带您到何处。
当我开始使用DDD时,我注意到的一件事是,作为一个了解设计模式和体系结构的开发人员,我倾向于从一开始就抽象很多。当我停下来并开始思考有关领域的具体概念时,建模开始变得容易得多。现在,当我了解有关 domain 和 system 的更多信息时,就可以进行概括和抽象。