使用DocumentDb或Event Sourcing处理DDD / CQRS中包含大型集合的聚合

时间:2014-08-06 14:10:59

标签: architecture domain-driven-design storage cqrs

我正在开发一个批量管理大量文档生产的项目。 工作流程

  1. 用户创建一个新的" Batch"使用该应用程序,基于定义其要求的模板(要求通常是用户必须上传的文件,系统将处理这些文件)。
  2. 一旦满足所有要求,系统将处理所有输入并生成大量文档(数千)
  3. 这些文件需要及时进行后期处理
  4. 必须完成一些批处理操作,例如,发布所有文档,在这种情况下,所有这些文档都需要先进行后处理。
  5. 可以同时运行哪些操作有限制,每个文档最多可以进行一次后处理等等。
  6. 我目前已经模拟了" Batch"它本身作为聚合根,但不要将生成的文档列表存储在"批处理"对象本身,而是使用一个持久存储在"批处理"中的集合ID从我的数据存储中检索这些文档。宾语。我选择这样做的唯一原因是因为我不想让我的聚合根包含一个大集合并变得臃肿,但这会妨碍开发业务逻辑,因为现在我必须处理"批次"。

    中的文档之间的一致性问题

    我的问题是,在DDD / CQRS中,当使用文档数据库进行持久化和/或使用事件源时,如何处理包含大型集合的聚合?

    我看过this postthis post,既没有解决我的问题,也没有使用nhibernate集合过滤器,对我来说既不是我的选择,也不认为是解决这个问题的正确方法它将存储逻辑泄漏到域模型中,另一个更多是关于访问嵌套聚合中的对象,而不是解决存储/检索问题。

    仅供参考,使用.net,c#,服务总线,使用SQL支持的过度简化的通用存储库,计划在不久的将来切换到MongoDb。

1 个答案:

答案 0 :(得分:1)

我害怕,我没有快速回答你的问题。我认为这取决于您的域的设计 - 特别是事务性和最终的一致性。很难摆脱以数据为导向的思维模式。 我发现Vaughn Vernon对原版的跟进书非常有用。他的书基于他在Effective Aggregate Design上的论文。我发现他们在这个领域非常有见地。