gpt4 book ai didi

domain-driven-design - 事件溯源、CQRS、DDD : One-to-Many relationship

转载 作者:行者123 更新时间:2023-12-02 20:42:18 24 4
gpt4 key购买 nike

我是使用 CQRS 进行事件溯源的新手。我试图定义我的程序的聚合根。假设我有这两个实体:汽车和人。还有一个不变量:一辆车只能由一个人拥有。

它基本上是人和汽车之间的 1-TO-M 关联

我有这三个命令:

  1. 重新喷漆汽车(仅给出汽车 ID)

  2. 更改车主(给出汽车 ID 和新的人员 ID)

  3. 重新粉刷某人拥有的所有汽车(仅给出人物 ID)

如果我使用汽车作为 AR,命令 #1 会很快运行。我将推送一个 CarRepaint 事件。命令 #2 也可以快速运行(推送 CarIsOwnedBy 事件)但是命令#3 出现了问题,我需要遍历商店中的所有事件才能获取特定人拥有的每辆车。该不变量也很容易实现。

如果我使用 Person 作为 AR,命令 #3 会很快运行。我将为与该人关联的每辆车推送 CarRepaint 事件。但是命令 #1、#2 出现问题,我需要查看商店中的所有事件才能找到好车。我在确保不变量保持正确方面也遇到了问题。

我是否以错误的方式处理问题?

感谢您的帮助

最佳答案

Am I approching the problem in the wrong way?

没有。您可能还没有完成,但到目前为止的方法是合理的。

首先要检查的是这个模型是否是汽车的权威,或者它是否只是记录来自其他权威(如现实世界)的数据。如果现实世界是权威,那么你需要以事件来思考,而不是命令;领域模型不应该试图否决来自现实世界的证据。

但假设目前模型是权威,那么接下来要考虑的是您的失败模式(根据我的经验,关注快乐路径并不能告诉您如何组织模型)。如果四辆车中的一辆车拒绝喷漆会发生什么?你不画它们吗?你再把它们去掉吗?你让他们一个人呆着吗?

您可能需要考虑的另一件事是模型是否应该支持“所有汽车”的歧义。如果模型是汽车集合的记录簿,那么模型可以在命令运行时更改该集合。所以也许所有汽车的拼写都不正确。所有汽车在特定时刻都是不可变的,但可能仍然模糊。此提供的列表中的所有汽车都是明确的。

您还应该考虑您是在描述一个命令(单个全有或全无事务)还是一个进程(协调多个命令)。运算符(operator)可能刚刚开始绘制汽车的过程,模型进行编排,向集合中的每辆车发送适当的命令。

关于domain-driven-design - 事件溯源、CQRS、DDD : One-to-Many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com