【发布时间】:2017-09-08 21:04:12
【问题描述】:
我遇到了一个问题,不知道该怎么办。
我的域名:
我有一个 Booking 实体,是 booking 业务上下文 的根。
Booking 内部存在 Event(s) 集合,即用户创建的真实事件列表。 Booking看起来有点没用,但是整个系统把Booking链接到其他实体,所以它确实是业务的根源。
Event 可以有文本注释,因此我创建了一个 Notes 实体。我使用实体是因为笔记可能会随时间变化,它们链接到 事件 并且不能共享。 Notes 实际上绑定在 booking 业务上下文 中并聚合到 Booking 根实体。
表单(创建事件):
我有一个用于提交“事件”的表单。实际上,表单的数据会生成一个命令,其中包含创建新 Event 所需的所有信息,如果用户愿意,还可以生成它的 Notes。
命令(创建事件):
从表单创建命令并将其发送到服务器。该命令有事件的数据。
服务器上的处理程序对主实体 Booking 进行操作,创建一个新的 Event。 Event 可能有也可能没有Notes,这取决于用户在表单中输入的内容。
booking 业务上下文 处理的其他命令是:
- 删除事件
- 取消一个事件(为无法发生的事件创建一个特殊事件),将来它还可以用于添加注释(事件被取消的原因)
- 为取消的事件创建备份事件
另一个实际上在这个上下文中的命令是
- 更新事件备注
我的问题来了:
无需处理 Event 即可进行更改,是否可以将 Notes 提升为根实体并且它们是业务上下文?所以,我最终会为 Bookings 和 Notes 提供一个上下文。
实际上,要更改 Notes 并保留在 DDD 上下文中,因此不要暴露太多,我必须进行一些“跳转”来执行更改。它有效,是的,但它很丑。如果我拆分这些东西,也许它会更优雅,并且限制在正确的上下文中。
另一方面,如果答案是 yes,我该如何处理第一个命令,它会生成带有 Notes 的 Event ?同样的问题也适用于取消。
我无法从表单中触发两个命令,一个依赖于另一个,因此顺序很重要。
也很难创建一个处理程序(最后是一个事件监听器),在创建/取消成功完成后,它会触发第二个命令来更改 Notes。如何识别正确的事件?必须使用表单发送的数据创建侦听器,以匹配要处理的事件。
【问题讨论】:
-
我不明白你所说的“上下文”是什么意思,是不是来自 DDD 的“有界上下文”?
-
是的,我只是使用了错误的名称。有界上下文,而不是业务上下文。