DDD:持久聚合

2024-05-09

让我们考虑一下典型的Order and 订单项目例子。假如说订单项目是的一部分Order聚合,只能通过订单添加。所以,要添加一个新的订单项目 to an Order,我们必须通过存储库加载整个聚合,将新项目添加到Order对象并再次保留整个聚合。

这看起来开销很大。如果我们的Order has 10 订单项目?这样,只需添加一个新的订单项目,我们不仅要读10订单项目,但我们还应该重新插入所有这 10 个订单项目再次。 (这是 Jimmy Nillson 在他的 DDD 书中采用的方法。每次他想要持久化一个聚合时,他都会清除所有子对象,然后再次重新插入它们。这可能会导致其他问题,因为子对象的 ID 是由于数据库中的 IDENTITY 列,每次都会更改。)

我知道有些人可能建议在聚合根应用工作单元模式,以便它跟踪已更改的内容并仅提交这些更改。但这违反了持久性无知(PI)原则,因为持久性逻辑正在泄漏到域模型中。

以前有人考虑过这个问题吗?

Mosh


这不一定是问题,一些 ORM 支持惰性列表。 例如 您可以加载订单实体并将项目添加到详细信息集合中,而无需实际具体化该列表中的所有其他实体。

我认为 N/Hibernate 支持这一点。

如果您正在编写自己的实体持久性代码而不使用任何 ORM,那么您就很不走运,您将不得不重新实现与 ORMappers 免费提供的相同的脏跟踪机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DDD:持久聚合 的相关文章

随机推荐

  • 如何在已实现特征的现有类型的枚举范围内实现特征?

    如何在已实现特征的现有类型的枚举范围内实现特征 我有这个 extern crate pnet use pnet packet ipv4 Ipv4Packet use pnet packet ipv6 Ipv6Packet enum Ethe
  • 为什么要检查 Bower 组件?

    鲍尔文档说 注意 如果您没有编写供其他人使用的包 例如 您正在构建 Web 应用程序 则应始终将已安装的包签入源代码管理 有谁能很好地回答为什么吗 如果我正在制作一个网络应用程序 我不希望我的存储库因库 X 版本的更新而混乱 我只想更新 B
  • Keycloak 社交登录 REST API

    我已经为我的 keycloak 实例启用了谷歌社交登录 但我需要将其用作休息服务 是否有可用于执行此操作的端点 Keycloak 中没有 Google 身份验证 API 但您可以使用以下方法解决它代币交换 https www keycloa
  • 在 Java 5 及更高版本中迭代 java.util.Map 的所有键/值对的最简单方法是什么?

    在 Java 5 及更高版本中迭代 java util Map 的所有键 值对的最简单方法是什么 假设K是您的密钥类型 并且V是你的值类型 for Map Entry
  • 在Powershell中,如何设置$?不将该值发送到管道?

    PS gt gci C lt
  • ApplicationEventMulticaster 未初始化 - 在多播事件之前调用“刷新”

    我正在尝试实施ehcache对于我的应用程序 但是当尝试调用服务器时 出现以下错误 java lang IllegalStateException ApplicationEventMulticaster not initialized ca
  • Xcode 7 Playground 执行 EXC_BAD_ACCESS

    在 Xcode 7 Playgrounds 中运行最简单的默认代码 得到以下错误 Playground execution failed Execution was interrupted reason EXC BAD ACCESS cod
  • 为什么在快速合并两个视频或更改背景音乐后视频变成黑屏?

    在我的 ios 应用程序中 我想合并两个视频并更改背景音乐 我尝试过 对于普通视频来说效果很好 但是 当我选择任何延时视频 然后尝试合并或更改背景音乐时 视频变成全黑屏 对于我的应用程序 我使用 swift 4 2 和 xcode 10 我
  • 在 Rails 上制作 ruby​​ 占用更少的内存

    我正在尝试运行 Ruby on Rails 项目 redmine http www redmine org 在 VPS 上 它可以工作 但需要相当多的内存 与 VPS 的其余部分相比 rails 应用程序的使用量非常少 我的服务器上也运行着
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • Android Youtube API 可用吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有适用于 Android 的 YouTube API 吗 如果不是 除了通过网络浏览器之外 如何从 Yo
  • Jmeter动态生成请求的json负载

    我有一个 Jmeter 测试计划 我希望 HttpSampler 发送发布请求 请求正文应包含 Json 如下所示 productIds p1 p2 我设置了一个随机变量生成器 每次调用都会返回格式正确的 ProductId 我想做的是通过
  • 我如何使用cloud-init在azure中的ubuntu VM上加载数据磁盘

    我一直在尝试使用 cloud init 在 azure 中的 Ubuntu VM 上分区和安装数据磁盘 大多数在线示例都展示了如何对临时磁盘执行此操作 但没有对数据磁盘执行此操作 我尝试涉足它 但运气不佳 如果我在下面的代码中做错了什么 或
  • JavaScript 中的常用数字

    在我的任务中 我必须编写一个程序来查找数组中最常见的数字以及它重复的次数 我写了一些东西 但只打印最大重复次数 所以我的问题是如何打印这个元素的值 最大数量 在我的例子中是 4 var array 13 4 1 1 4 2 3 4 4 1
  • Xcode 6 代码编辑器异常行为

    截至最近 我在使用 Xcode 6 代码编辑器时遇到了一些麻烦 最终导致编辑窗口中的焦点快速变化 在编辑文本时跳转到同一文件中完全不同的位置 一切就是这样开始的 最近 编辑器拒绝上下滚动 挂起 停止显示行号或任何其他文本 我该怎么做才能让它
  • 如何禁用 Postman 应用程序的自动更新

    有没有办法禁用 Postman 中的更新 7 26 对我来说有问题 它会在 nresponses 上冻结较大的调试数据 但 7 23 运行得很好 但即使我将 自动下载主要更新 设置为禁用 也没有帮助 因为这是一个次要更新并会自动应用 有没有
  • Angular 6. 是否可以按条件注入服务?

    在我的角度应用程序 带有角度材料 中 我有一个过滤器面板 除了选择之外 我还希望能够自动完成 用户输入值并将其发送到后端 通过 regexp 查询我们在 MongoDB 集合中找到匹配项 但要做到这一点 我需要手动将服务注入过滤器组件 我没
  • 如何使用 iPhone 将照片上传到服务器?

    我正在编写一个 iPhone 应用程序 它可以拍摄照片然后将其上传到服务器 如何使用 Cocoa 将照片上传到服务器 我想我在某处使用 NSUrl Thanks Header interface EPUploader NSObject NS
  • Windows Server 2016 中的 Docker 无法运行

    我有一个新的 Windows Server 2016 并应用了所有更新 我按照来自的命令快速开始 https learn microsoft com en us virtualization windowscontainers quick
  • DDD:持久聚合

    让我们考虑一下典型的Order and 订单项目例子 假如说订单项目是的一部分Order聚合 只能通过订单添加 所以 要添加一个新的订单项目 to an Order 我们必须通过存储库加载整个聚合 将新项目添加到Order对象并再次保留整个