我最近学习了DDD,我们曾经将创建,更新,删除封装到存储库中以保持对数据库的更改。
使用ORM工具,我们可以忽略持久性的细节,通常存储库的参数是聚合根对象,并且ORM执行持久性的转换(例如,如果只有一个,它将更新一个字段变化)。
但是如果没有ORM,只有一个聚合根对象的字段被更改并保存到DB,如何为存储库设计它?支持保存此字段的方法?有一种名为update的方法可以保存所有属性,但是使用它会导致性能问题。
答案 0 :(得分:1)
要坚持更改,只需要知道发生了什么变化。有两种常见的方法可以实现这一目标:
跟踪发生的变化。当实体明确地参与变更跟踪机制时,该策略更容易实现。例如,对于Event Sourcing,聚合根将在其处理的所有命令的集合中record uncommitted change event(s)。
脏检查:将新状态与旧状态进行比较。请注意,可以缓存旧状态以进行性能优化。
答案 1 :(得分:0)
通常您需要另一个存储库。它是如何实现的取决于你。 您可以编写代码,以便在更改时只能保存/更新单个字段。
如果你想更新单个字段,因为他们改变一种方法来做到这一点就是使用观察者来观察突变"在你的对象中。这种方法可以有两种操作模式"
这种方法在大型系统中可能具有其他性能影响。你必须看看它是否适合你。
另一种选择是让您的ORM通过比较识别更新时更改的字段。这又有其自身的性能影响,因为您必须再次获取DB对象(聚合)并将其与运行时更改进行比较。
您实际上如何实际执行这些操作取决于您使用的语言及其实用程序。性能问题在很大程度上还取决于语言/运行时平台/第三方软件以及许多其他事情。