RavenDB - 当我想要引用另一个根聚合时

时间:2011-09-22 16:02:42

标签: c# ravendb

我一直在使用DDD,所以我对聚合的想法很满意。起初,我确实遇到了麻烦,不使用/持久引用其他根聚合,但我认为我在船上......所以:

  • 将根聚合存储为一个文档....检查
  • 使用包含不会更改或很少更改的属性的非规范化引用....检查

对于我想要完全引用另一个根聚合的时间,我理解建议我保留对其ID的引用,并且可以使用RavenDB客户端API的 Includes 来检索所有实体都有效率。

处理数据部分,我没有看到的是在我的实体类中处理它的最佳方法:

  1. 使用产品上的 [JsonIgnore] 在我的班级中同时拥有产品 ProductId 属性,以确保它没有坚持使用该文档。
    • 完整的对象图可以在存储库中粘合在一起(使用API​​的 Includes 来提高效率),或者我可以将服务注入到将获取 Product 的实体中懒惰(可能N + 1命中)
  2. 在ViewModel中将其粘合在一起。我不喜欢这个想法,因为如果没有正确使用,我最终会在域中出现意外的NULL引用。
  3. 我还没有看到其他一些显而易见的方式?
  4. 思想?

2 个答案:

答案 0 :(得分:2)

在DDD中至少有两个有效的观点。某些ppl仅根据ID或其他有效密钥链接根聚合,其次是使用特定于平台的对其他对象的引用。两者都有自己的优点和缺点。

使用像RavenDb这样的NoSql解决方案,使用第一种方法可能更好,因为第二种方法在技术上是错误的。

答案 1 :(得分:1)

你明确反对这里推荐的设计,为什么你想要一个Product属性引用另一个聚合?它给你带来了什么?