Domain driven design 如何设计在DDD中保存聚合根的字段

Domain driven design 如何设计在DDD中保存聚合根的字段,domain-driven-design,Domain Driven Design,我最近学习了DDD,我们通常将创建、更新和删除封装到存储库中,以将更改持久化到数据库中 使用ORM工具,我们可以忽略持久性的细节,通常存储库的参数是聚合根对象,ORM执行持久性的转换(例如,如果只有一个更改,它将更新一个字段) 但若并没有ORM,只有聚合根对象的一个字段被更改并保存到DB,那个么如何为存储库设计这个字段呢?是否支持保存此字段的方法?有一个名为update的方法可以保存所有属性,但使用它会导致性能问题。通常您需要另一个存储库。如何实施取决于您。 您可以编写代码,以便在单个字段发生更

我最近学习了DDD,我们通常将创建、更新和删除封装到存储库中,以将更改持久化到数据库中

使用ORM工具,我们可以忽略持久性的细节,通常存储库的参数是聚合根对象,ORM执行持久性的转换(例如,如果只有一个更改,它将更新一个字段)


但若并没有ORM,只有聚合根对象的一个字段被更改并保存到DB,那个么如何为存储库设计这个字段呢?是否支持保存此字段的方法?有一个名为update的方法可以保存所有属性,但使用它会导致性能问题。

通常您需要另一个存储库。如何实施取决于您。 您可以编写代码,以便在单个字段发生更改时能够保存/更新它们

如果要在单个字段更改时更新它们,一种方法是使用观察者“观察对象中的变化”。这种方法可以有两种“操作模式”

  • 临时:当一个字段被更新时,立即保存该字段的值
  • 聚合更新:收集所有更新字段的信息(只是更新字段而不是数据)。然后在时机成熟时立即更新它们
在大型系统中,此方法可能具有其他性能影响。你得看看它是否适合你

另一个选择是让您的ORM在更新时通过比较识别更改的字段。这同样有其自身的性能影响,因为您必须再次获取DB对象(聚合),并将其与运行时更改进行比较


如何实际实现这些功能在很大程度上取决于所使用的语言及其实用程序。性能问题还严重依赖于语言/运行时平台/第三方软件和许多其他因素。

要保持更改,显然只需要知道更改了什么。实现这一点有两种常见方法:

  • 跟踪发生的更改。当实体明确参与变更跟踪机制时,该策略更容易实现。例如,对于它处理的所有命令,使用聚合根将在集合中显示

  • 脏检查:将新状态与旧状态进行比较。请注意,旧状态可能会被缓存以进行性能优化


  • @你忘了你的问题了吗?