2015-05-16 77 views
0

在使用事件采购的应用程序中,是否可以接受汇总范围内的事件?整体事件是否可以接受?

考虑一个博客应用程序的设计示例,该应用程序提供了创建帖子和添加和删除简单标签(帖子将是聚合根)的功能。

这可能导致以下事件:

PostCreated: postId, "title", "content" 
TagAdded: postId, "Foo" 
TagAdded: postId, "Bar" 
TagAdded: postId, "Baz" 
TagRemoved: postId, "Bar" 

重放上述事件流会导致一个标题,内容和两个标签(“富” &“巴兹”)后。

现在设想用户界面只允许您在创建帖子时选择现有标签并且不接受自由文本;只有特权用户才有能力更新标签主列表。

现在,当特权用户创建新标签时,需要创建相应的事件,以便a)信息实际上存储在事件存储中,以及b)在某个时刻更新读取模型,以便用户创建博客帖子可以在UI中选择新标签。

看起来像TagCreated: postId, "NewTag"的事件对我来说不正确,因为这些信息并不直接适用于单个帖子。

考虑,在这种情况下,信息不保证它自己的聚合根,只会在这有限的上下文中使用我所期望的线沿线的一个事件:

TagCreated("NewTag") 

这些事件将被存储在事件存储使用与特定帖子的上一组事件相同的聚集ID,但没有特定聚合实例的ID。

到目前为止,这听起来像是一种合乎逻辑的方式来处理这个问题,但想知道如果我以这种方式接近它,是否会漏掉任何明显的东西。

回答

0

恕我直言,你让复杂化你的生活不必要。域事件通常是可用的交叉有界上下文,它们应该通过引用其ID来与聚合根(AR)相关联。

在你的例子中,我认为标签是一个值对象,所以它会需要一个帖子ID。但是,如果您希望标签自身可用,那么它将是一个AR,因此,该事件将具有TagId属性。

顺便说一句,域事件是一个DTO,意味着随处可用,它们不是需要封装在一个聚合中的域详细信息。

0

我想你错过了“标签目录”或类似的概念。它可以有一个单一的聚合体(或者你可能会有不同的用户群或类似的目录),以目录作为根目录,包含所有的标签作为值对象。

相关问题