DDD 持久化的时候如何避免无效 DB 操作?

2023-05-01 13:23:06 +08:00
 vczyh

DDD Repository 中的 save(T t) 方法实现 insert 和 update ,如果 t 中只有某个字段发生改变,那么只需更新这个字段即可,而不是更新全部字段,一般即使全部更新的话问题也不是很大,但是如果 t 中有列表或者设计到多张表,这个时候可能增加对 DB 的操作,请问如何解决这种问题?

从网上找到 snapshot 解决方法:

大家有没有什么实践或建议?

3079 次点击
所在节点    程序员
30 条回复
echoless
2023-05-01 21:11:41 +08:00
@Leviathann #12 我观察过 python 的 sqlalchemy 也是类似的机制, 生成的 sql 是很精简的.
vczyh
2023-05-02 18:13:13 +08:00
@huwt 是的,有时候性能和可维护性要平衡一下
vczyh
2023-05-02 18:14:52 +08:00
@huwt 就算让他进来也得统一通过 Repository ,不能把 dao 和 数据库实体入侵进来
vczyh
2023-05-02 18:16:31 +08:00
@echoless Hibernate 没研究过,我的想法是更倾向于不依赖具体框架和语言
echoless
2023-05-02 18:40:26 +08:00
@vczyh 这个从 object 到 db 的操作 如果你用了 orm 就是 orm 的事情 你不用管细节
nielinjie
2023-05-03 11:53:47 +08:00
实践中很难到关注到这个的程度。换句话说,此种调优几乎不会有必要。
如果有要做,需要考虑一致性的问题。
在多读多写的情况下,diff 后再写跟整个对象覆盖写的语意不同。需要根据业务要求进行区别。
857681664
2023-05-03 13:19:03 +08:00
看起来比较容易实现的是把 repo 层上升到 domain 层,然后自己做 diff ,再 update
kkbblzq
2023-05-03 22:30:19 +08:00
感觉用 DDD 主要还是借用思想,具体还是要根据当前公司 /项目的情况来进行适配的,并不是说存储层接口定义只能这样设计。。我上家公司推 DDD 一年之后,基本项目上都做了简化的,完全按 DDD 那套来要增加不少开发成本。
vczyh
2023-05-04 09:21:26 +08:00
@kkbblzq 请教一下,请问做了哪些简化呢,想学习一下。
vczyh
2023-05-07 16:16:12 +08:00
@nielinjie 这个角度很不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936712

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX