Domain driven design CQRS-从一个表单生成多个命令

Domain driven design CQRS-从一个表单生成多个命令,domain-driven-design,cqrs,Domain Driven Design,Cqrs,我有一个问题,我不知道该怎么办 我的域名: 我有一个预订实体,预订业务背景的根源。 在预订中存在事件的集合,即用户创建的真实事件列表预订看起来有点无用,但整个系统将预订链接到其他实体,因此它确实是业务的根源。 事件可能有文本注释,因此我创建了一个注释实体。我使用实体是因为注释可能会随时间而变化,它们链接到一个事件,无法共享注释实际上绑定在预订业务上下文中,并聚合到预订根实体 表单(创建事件): 我有一张用来提交“事件”的表格。实际上,表单的数据生成了一个命令,其中包含创建新的事件所需的所有信息,

我有一个问题,我不知道该怎么办

我的域名:
我有一个预订实体,预订业务背景的根源。
预订中存在事件的集合,即用户创建的真实事件列表预订看起来有点无用,但整个系统将预订链接到其他实体,因此它确实是业务的根源。
事件可能有文本注释,因此我创建了一个注释实体。我使用实体是因为注释可能会随时间而变化,它们链接到一个事件,无法共享注释实际上绑定在预订业务上下文中,并聚合到预订根实体

表单(创建事件):
我有一张用来提交“事件”的表格。实际上,表单的数据生成了一个命令,其中包含创建新的事件所需的所有信息,如果用户需要,还包括它的注释

命令(创建事件):
从表单创建命令并发送到服务器。该命令包含事件的数据。
服务器上的处理程序对主实体Booking进行操作,创建一个新的事件。事件可以包含或不包含注释,具体取决于用户在表单中输入的内容

预订业务上下文处理的其他命令包括:

  • 删除事件
  • 取消一个事件(为无法发生的事件创建一个特殊事件),将来它还可以用于添加注释(为什么取消该事件)
  • 为已取消的事件创建备份事件
另一个命令,实际上在这个上下文中,是

  • 更新事件的注释
我的问题来了:
如果能够在不必处理事件的情况下进行更改,那么注释是否可以作为根实体进行升级,并将其作为业务上下文?因此,我将以一个预订上下文和一个注释上下文结束。
实际上,要更改注释并保持在DDD上下文中,因此不要暴露太多,我必须进行一些“跳跃”来执行更改。是的,它很管用,但很难看。如果我把东西分开的话,可能会更优雅一些,并且有正确的上下文

另一方面,如果答案是,我如何处理第一个命令,该命令生成带有注释的事件?同样的问题也适用于取消。
我无法从表单中触发两个命令,一个命令依赖于另一个命令,因此顺序很重要。
创建一个处理程序(最后是一个事件侦听器)也很困难,在创建/取消成功完成后,它会触发第二个命令来更改注释。如何识别正确的事件?必须使用表单发送的数据创建侦听器,以匹配要处理的事件

在预订中存在活动集合,即列表 由用户创建的真实事件。预订看起来有点没用,但是 整个系统将预订与其他实体联系起来,因此非常方便 企业的根本

据我所知,
root
没有必须保护的不变量。即使
事件
属于
预订
如果没有规则规定某些事件组合不应该存在,那么
事件
也应该是一个
聚合根

因此,
CreateEventCommand
应该包含
BookingId
EventId
和一个可选的
notes

注释实际上绑定在预订业务上下文中,并且 聚合到预订根实体

我不太同意这一点。注释属于
事件
,而
事件
属于
预订
,因此
注释
链接到
预订
是正常的,但是没有不变量将
注释
链接到
预订
,在任何情况下,只有
DDD
允许的
ID
关联

是否可以将Notes提升为根实体,并将其作为业务上下文

是,如果没有必须受
事件AR
保护的不变量。然后,
CreateNewNoteCommand
应该包含
BookingId
EventId

创建处理程序(最后是事件侦听器)也很困难 在创建/取消成功完成后,它将触发 更改注释的第二个命令。我如何识别正确的 事件必须使用表单发送到的数据创建侦听器 匹配要处理的事件


事实上,设计给了你一个反馈,说你做错了。如果您正确设计了
聚合
,则不应出现这种情况。如果事情变得非常复杂,那么回去重新考虑你的设计。DDD与重构有很大关系。

我不明白你所说的“上下文”是什么意思,是DDD中的“有界上下文”吗?是的,我只是用错了名字。有界上下文,而不是业务上下文。Mhh。。。事实上,我在想如果
事件
也必须是一个
聚合根
。到目前为止,我没有这样做的原因是
预订
是为有限的时间范围(一个学期)创建的。不能在学期边界之外创建
事件
。这种控制应该而且只能在
预订中进行
@user3604315这无关紧要。如果无法创建
预订
,则您没有该预订的
ID
,也无法创建
CreateEventCom