【发布时间】:2017-08-03 09:13:01
【问题描述】:
我尝试了解将属性从一个聚合根填充到另一个聚合根的最佳方法。
我有Model Aggregate Root、Category Aggregate Root、Filter Aggregate Root
每个Model 都可以有一些Filter 列表,并且可以在Category 之一中。 Category 可以有一个Filter 用于继承Model。当Model的Category属性更新时,Filter必须从Category继承到Model,当Category中的Filter属性更新时,所有Models都来自那个@ 987654338@ 必须继承新值。所有继承的Filters都无法更新,但可以编辑手动添加的过滤器。
我“发明”的一种方法是使用 Process manager 和包含 Category filter 和 Models list 的状态。
所以我会有这样的行为:
-
Category ARUpdateCategoryFilter(命令)-> CategoryFilterUpdated(事件) -
Model ARAddCategory (命令) -> CategoryAdded (事件), RemoveCategory (命令) -> CategoryRemoved (事件), InheritFilter (命令) -> FilterInherited (事件), RemoveInheritedFilter (命令) -> InheritedFilterRemoved (事件) -
Filter ARCreateFilter(命令)-> FilterCreated(事件) - 进程管理器
FilterInheritance拥有correlationIdResolverbycategoryId,触发 [CategoryFilterUpdated,CategoryUpdated] 事件
PM 行为是这样的:
current State(filter, models) =>
if CategoryFilterUpdated(... newFilter ...) =>
set new State(... newFilter ...) {
models.forEach(send InheritFilter(model, newFilter))
}
if CategoryAdded(.... modelId ...) =>
set new State(... models.add(modelId) ... ) {
send InheritFilter(modelId, filter)
}
if CategoryRemoved(.... modelId ...) =>
set new State(... models.remove(modelId) ... ) {
send RemoveInheritedFilter(modelId, filter)
}
这是正确的方法吗?还有其他方法吗?
【问题讨论】:
-
为什么称这段代码为“流程管理器”?它管理什么样的流程,流程什么时候开始,什么时候结束?
-
这是一些伪代码。它是
some,它侦听事件流并在相关事件(CategoryFilterUpdated、CategoryUpdated)出现时通过发送命令(InheritFilter(model, filter))更改其状态(State(filter, models))。 -
这不是我的问题。我的问题是你的流程是什么?那里没有进程,只有几个事件处理程序。
标签: domain-driven-design cqrs event-sourcing