【发布时间】:2019-09-22 11:07:54
【问题描述】:
我是事件溯源和 ddd 的新手,我正在尝试创建一个简单的应用程序来了解更多信息,但我正在为如何为两个聚合之间的关系建模而苦苦挣扎。
这个想法是允许公司创建可供用户搜索的活动。
我希望能够执行规则,即公司只能根据其会员级别进行如此多的活动。
我的第一种方法是让 Company 成为聚合根,其中包含活动列表并轻松控制它。但是,这意味着我必须通过公司聚合来访问每个活动,这并不理想,因为针对活动的大多数行动并不依赖于公司。
我的第二种方法是让公司和活动分开。这意味着我必须首先引发一个 ActivityCreated 事件,然后是一个 ActivityAddedToCompany 事件,如果公司已经充满了活动,它将引发异常。这种方法似乎更好,但我不确定是否需要 ActivityAddedToCompany 是我没有正确分离聚合的标志,因为在快乐的路径中,ActivityCreated 和 ActivityAddedToCompany 将始终彼此存储。
第二种方法更好还是我错过了领域驱动设计中的一些基本内容?
【问题讨论】:
-
为了帮助澄清,我建议坚持使用术语活动。您有时将这些事件称为活动,有时称为活动。您还可以互换使用 Business 和 Company,这不是那么令人震惊,但会增加混乱。定义和坚持通用语言有助于消除歧义。其次,您能否指定一个活动是否可以在没有公司的情况下存在?多个公司可以共享同一个活动吗?
-
感谢您的回复。我仍在以明智的方式解决所有问题,但已按照您的建议编辑了我的问题以使用 Activity 和 Company。规则是活动不必由公司创建。假设一家公司在任何时候只能有 5 个活动(活动一旦发生就会被“删除”)。一个 Activiy 只能注册到一个公司。
标签: domain-driven-design event-sourcing