我知道DDD建议为每个业务操作创建单独的用例。
假设您有一个Player集合。它具有地址值对象。
DDD不允许在UpdatePlayer()
层上创建PlayerApplication
方法。相反,我们应该做的是创建业务感兴趣的特定用例。因此,我想拥有UpdatePlayer()
,而不是RelocatePlayerTo(Address newAddress)
。
如果在重定位后发现我在newAddress中输入了错误,该怎么办?如何调整地址?例如,我拼错了街道名称,或输入了错误的单元号。
我应该创建一个新的用例AdjustPlayerAddress
吗?还有一个新的DomainEvent PlayerAddressHasBeenAdjusted
?
答案 0 :(得分:0)
如果需要校正值怎么办?
这里有一个重要的考虑因素:数据的权威来源是您的模型还是其他?
例如,我住址的权威来源是真实世界。正确的拼写取决于不受模型控制的所有事物。在那种情况下,我们应该真正考虑模型作为数据副本所持有的内容,这可能是过时的。
在这种情况下,实体的API会趋于贫乏(实际上,您是否打算尝试写出地址可能更改的所有不同原因?并且您确定我作为主题) ,愿意与您分享这些内容吗?)
但是,对于相关数据归模型所有的情况,您很有可能应该创建描述工作中有趣的业务流程的特定流。
有时候,这将有助于更精确地了解正在发生的事情。例如,如果您认为ChangeOfAddress
请求本身就是什么呢?然后问题就变成了信息如何在系统的其余部分中移动。
主要思想不是“不要使用CRUD”,而是要使语言与领域的语言相匹配。您的思想拼写的主要来源应该是域专家。