Domain driven design 在DDD中使用骨料

Domain driven design 在DDD中使用骨料,domain-driven-design,aggregate,Domain Driven Design,Aggregate,正在查找有关使用聚合根的说明 如果我有一个模型(一份问题报告),如下所示 问题纸--->问题--->答案 我已经确定问题文件是一个聚合根,如果我想为一个问题选择一个答案,我是否必须在聚合根上放置一个公共方法,或者我是否可以从根上公开问题,并在问题对象上放置一个公共方法来选择答案???通常,您总是希望与聚合根交谈。如果您正在读取值,那么有时可以方便地在聚合根中向聚合添加公共访问器,但它很快就会变得丑陋(德米特定律、破坏抽象等),我建议您不要这样做 然而,对于任何改变状态的事情,始终遍历聚合根是至关

正在查找有关使用聚合根的说明

如果我有一个模型(一份问题报告),如下所示

问题纸--->问题--->答案


我已经确定问题文件是一个聚合根,如果我想为一个问题选择一个答案,我是否必须在聚合根上放置一个公共方法,或者我是否可以从根上公开问题,并在问题对象上放置一个公共方法来选择答案???

通常,您总是希望与聚合根交谈。如果您正在读取值,那么有时可以方便地在聚合根中向聚合添加公共访问器,但它很快就会变得丑陋(德米特定律、破坏抽象等),我建议您不要这样做

然而,对于任何改变状态的事情,始终遍历聚合根是至关重要的。聚合根表示一致性边界(即,它直接或间接地负责将事物保持在有效状态),如果允许状态更改,则会完全绕过此边界,从而为不断增加的复杂性打开大门


所以,这取决于你在问题中所说的“选择”是什么意思——如果你在查询,那么你可以不受惩罚,但这是个坏主意。如果您正在更改状态,请不要这样做,否则您的聚合根将不再是聚合根。

感谢您的回复。这就是我的直觉,通过“选择”,我的意思是我最终改变了应答对象的状态。再次感谢。