【发布时间】:2012-02-09 17:04:40
【问题描述】:
我想知道是否有人解决了将 CQRS 和 Event-Sourcing (Event-Store) 与分层树一起使用的问题?
我们希望树中有 1000 个节点和子节点中的 10 个,我担心带有事件源的 CQRS 是否不能很好地解决这个问题。我还没有看到可以在事件存储方面使用的快照。
同样从 DDD 的角度来看,我是将其建模为我的模型中的复合设计模式,还是应该更能反映数据在我的读取模型(即本例中的 SQL 服务器)中的存储方式。
【问题讨论】:
-
这些节点之间存在哪些不变量/一致性规则?节点代表什么?你在二叉树领域工作吗?
-
描述它的最佳方式是 iTunes 类型的树形结构,我们允许用户上传视频。可能有许多子文件夹(艺术家姓名/专辑等)。绝对不在二叉树的领域。我们可以允许用户删除文件夹(这将删除视频)、在文件夹之间移动视频、删除视频以及将视频从一个文件夹复制到另一个文件夹。
-
我只需要顺着树向下并延迟加载每个子树,然后如果用户选择了一个子树,那么就延迟加载它的子树。除了您可以使用类似 Windows Explorer 树的结构之外,我看不到任何其他要求。
-
看起来很粗鲁,在 UI 领域解决了很多次(现成的组件)......看不到与 DDD 的相关性。在这种情况下,您希望从使用 eventsourcing/cqrs 获得什么价值?为什么不将简单的模型节点作为单独的(数据)实体来完成呢?使用数据模型,而不是域模型,IMO。
-
一方面,您需要能够将这些权限传播到后代节点。您可以为此使用消息传递或批量更新(SQL 非常擅长基于集合的操作)。如果我说“简单节点模型”,我并不是说你不能使用 OO。为您的节点建模,使其封装其直接子节点(或引用标识符)和适用的权限集。对节点行为中的权限断言进行编码。这会使其成为域模型吗?可能是,但我怀疑规则是不断变化的:-)。因此,它不是,IMO。