【发布时间】:2015-11-20 13:44:49
【问题描述】:
这是我的示例结构:
Node
- Node
- Node (with propety type === leaf)
+ Person
+ Person
- Node
- Node
Node和Person是aggregates,由event sourcing提供支持。
Leaf 持有 NodeID 和 Person 持有 PersonID。它们之间不包含直接引用。
现在我知道如何查看过去的一个聚合并查看 Person 的整个历史。
- 获取
some time之前发生的所有事件 - 根据事件进行聚合重建
但我的问题是如何重建整个树结构以在过去的某个时候看到它?
我的模特:
Node
{
private string name;
private string parentNodeID;
private string type;
private Array hiredPersons;
Node(string name, string parentNodeID, string type) {
this.apply(new NodeHasCreated(name, parentNodeID, type));
}
public void hirePerson(Person person)
{
if(this.type === 'leaf') {
this.apply(new PersonHasBeenHired(person.id));
}
}
}
我不想实现的是保持从节点到节点的直接引用。这就是我使用 parentNodeID 的原因。
【问题讨论】:
-
你现在如何构建结构?为什么不能只获得一些初始状态和汇总更改?
-
我没有。我在这个项目的早期阶段。只是在找资料。初始状态?是的,但我需要获取根节点汇总事件的初始状态并获取有关关联节点的信息并对它们执行相同的操作。并且递归到底部,会花费很多时间。特别适用于 1k 个节点。好吧,我不知道,也许我的模型是错误的?如果你这么认为,请告诉我。
-
您将举办哪些类型的活动?某些类型的事件可以与许多节点相关吗?你也可以有很多初始状态
-
Node 和 Leaf 的初始状态将始终相同。我称它为叶子只是为了显示可以有多个人的节点。因为真正的 Leaf 只是具有特定
type属性的节点。 Node 中存在的事件例如:NodeHasBeenCreated、PersonHasBeenHired(仅当 type === 'leaf' 时才可能)、NodePositionHasChanged、NodeHasBeenDeleted、NodeTypeHasChanged。 -
我稍微更新了描述。
标签: java c# domain-driven-design cqrs event-sourcing