Xwi*_*utX 7 domain-driven-design aggregateroot cqrs event-sourcing
我正在做一个家庭日托应用程序,并认为我会尝试使用DDD/CQRS/ES,但我遇到了很好地设计聚合的问题.域名可以很简单地描述:
目标是跟踪访问的次数,生成发票,记录(例如午餐,伤害等),以防止访问.到目前为止,这些其他操作将是与系统最常见的交互,因为访问每天开始一次,但有趣的事情一直在发生.
我正在努力的不变量是:
据我所知,我有以下选择
1.单个聚合根 Child
创建一个Child
聚合根,与事件ChildEnrolled
,ChildArrived
并且ChildLeft
这看起来很简单,但由于我希望每个其他事件与访问相关联,这意味着访问将是Child
聚合的实体,每次我想添加注释或任何内容时,我必须获取所有访问那个孩子,永远.似乎效率低下且相当无关紧要 - 孩子本身以及其他每次访问都与孩子午餐时的情况无关.
2. Child
和和的聚合根Visit
Child
将来源ChildEnrolled
,Visit
并将来源ChildArrived
和ChildLeft
.在这种情况下,我不知道如何保持不变量,除了Visit
为此目的服务,我见过这是灰心丧气的.
是否有另一种方法来强制使用此设计的不变量?
这是一种虚假的不变量
我想这是可能的,我应该防止同时登录同一个孩子的多个人,或延迟意味着使用多次点击"登录"按钮.我认为这不是答案.
我错过了一些明显的东西
这似乎最有可能 - 这肯定不是一些特殊的雪花,这通常是如何处理的?我几乎找不到具有多个AR的示例,更不用说带有列表的示例了.
听起来你的不变式“如果孩子已经在这里就无法到达”中的“这里”可能是一个聚合的想法。也许Location
或者DayCareCenter
。从那里开始,确保他们Child
不会两次到达似乎微不足道,除非他们之前已经离开过。
当然,那么这个聚合的寿命就会相当长。然后,您可以考虑进行汇总BusinessDay
或类似的操作,以限制儿童到达和离开的原始计数。
只是一个想法。不一定是解决这个问题的方法。