【问题标题】:document db - denormalized references - best practice文档数据库 - 非规范化引用 - 最佳实践
【发布时间】:2011-10-31 05:31:27
【问题描述】:

哟 - 这本身不是 ravendb 问题 - 这是另一个设计问题 一般与文档数据库有关。

所以我一直在使用 DenormalizedReference 我突然想到,在很多地方,这让 DDD 变得相当困难。

所以,比如说我有一个有子集合的对象:

 List<DenormalizedReference<SomeType>>

这个子集合是在父集合被实例化时创建的 接受List&lt;SomeOtherType&gt;的重载构造函数

现在 - 在 ctor 中,我想从 SomeOtherType 创建这个列表 集合被传入 - 这意味着我需要创建一个新的 SomeType 对应每个 SomeOtherType。

没有将 DocumentSession 传递到我的域中 - 我不是 要做 - 这不会起作用,因为当父 AR 被保存时,我们 丢失除 Id 和 Name 之外的每个子对象的属性

其他人是如何处理这个问题的?

【问题讨论】:

    标签: design-patterns ravendb document-database


    【解决方案1】:

    你不能那样做。 或者更确切地说,你不应该那样做。

    有几种方法可以解决这个问题,通常使用静态网关来获取会话,但问题是这种方法创建了一个延迟加载的集合,并且存在所有问题。

    RavenDB 是专门为避免此类问题而设计的。并且您可以包含项目以避免返回到服务器,但您不应该尝试像那样透明地在 id 和类型之间移动。

    【讨论】:

    • 所以使用 Includes 是实现我需要的最佳方式?我认为我并没有通过坚持一些关系概念来真正使用 RavenDb 来发挥它的潜力。至少当您为更大的域走完整的 ddd/cqrs 路线时,才能实现真正的价值。你同意吗?
    • 是与否。这实际上取决于您拥有什么样的环境以及如何使用它。 Includes & ids 是解决引用问题的一种方法,非规范化引用是另一种方法。它们有不同的成本/收益比,这取决于我们在做什么以及我们如何使用东西
    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 2021-07-15
    • 2011-10-15
    • 2010-10-25
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多