我有以下域建模问题,我似乎最终要么跨越一致性边界或创建一个巨大的聚合。有人可以帮我分解吗?
有两种工作类型JobA
,JobB
。 JobA
由任务TaskA
组成。 JobB
由任务TaskB
组成。 JobA
和JobB
无关。它们之间唯一共同点是它们都需要设备资源。我本来想创建5个可能互相引用的聚合根 - JobA
将引用TaskA
等等。
我可以将一份工作及其任务集中在一起。这是以引入其他开销为代价的,因为任务本身就是复杂的生物。但是,以下约束阻止我使用任何一种模型。
TaskA
和JobA
)。拥有单个聚合会将所有交易放在边界内,但这会使聚合不可能大。是否有一个不同的模型隐藏在所有这些我缺少的?
答案 0 :(得分:1)
我认为最好的解决方案可能是使用最终的一致性。
当我对设计agreggates有疑问时,我总是看看Effective Agreggate Design by Vaughn Vernon。
答案 1 :(得分:0)
我知道这个问题已经过时了,但我没有看到您绘制的架构和一致性要求有任何问题:
作业必须有一个包含状态的任务列表。当任务在其自己的事务中完成时,它会发送TaskCompleted事件/消息,然后Job选择它并在内部更新任务状态。这样,Job无需检查任务agregate即可知道所有任务是否已完成。
必须对设备集合执行设备分配。这将生成将由Job聚合使用的EquipmentAssignedToJob事件/消息,以使用此作业正在使用此设备的信息更新其自身状态。如果使用或不使用,设备将知道它自己的状态。
作业完成操作将释放设备。从作业中释放设备生成可由设备和设备状态消耗的JobFinishedUsingEquipment事件/消息将更新为未使用。