DDD 中的聚合根持久化问题(使用关系型数据库)

2020-12-01 19:38:37 +08:00
 asanelder
老铁们,好像这种关系型数据库之间表的关系无法完美匹配领域模型啊!

你们在使用关系型数据库时怎么持久化聚合根的?

有没有好的思路和实践?
3913 次点击
所在节点    程序员
32 条回复
hantsy
2020-12-02 13:38:51 +08:00
hantsy
2020-12-02 13:42:34 +08:00
kvkboy
2020-12-02 13:44:01 +08:00
kvkboy
2020-12-02 13:45:06 +08:00
@kvkboy 手快不小心不小心发出去了,可以看看这个文章,挺有参考的价值。不过更多的还是需要看书,ddd 经典的两本一本理论一本落地
hantsy
2020-12-02 14:28:16 +08:00
@kvkboy 六边形和洋葱不错,特别六边形,把系统进出接口进行隔离,感观比较清晰。

文章提到的 Cargo 例子作为 Eric 原书 DDD 的一部分,使用了 Spring 框架,现在已经有各种版本了。

Eclipse EE4J 官方也维护了一个基于 Java EE/Jakarta EE 规范的 Cargotraker.

https://github.com/eclipse-ee4j/cargotracker
hantsy
2020-12-02 14:30:19 +08:00
asanelder
2020-12-02 18:32:22 +08:00
@hantsy #20
@kvkboy #23

感谢二位铁子,文章俺都看了,也有一些思路了,正在实践中。。。
Kirsk
2020-12-02 19:06:32 +08:00
Ddd 是业务建模 不是数据建模 不懂业务还是不要玩
iamppz
2020-12-02 20:13:14 +08:00
@asanelder 个人感觉跟数据库没有关系,你需要一个合适的 ORM,我用的 Spring Data JPA
hantsy
2020-12-02 20:43:24 +08:00
@iamppz 理想的设计层面,Domain 建模不会考虑到数据库,到真正实现的时候才考虑。如果 Domain 模型与数据库有关系,就是 DDD 中的 Entity,最终要持久化,不得不考虑到数据库的问题。

国内的实践,直到现在很多人做项目或者产品还是本末倒置,需求一到,数据库 Schema 优先设计,使用一些工具自动生成 Entities (或者什么框架需要的类似的东西,这只是数据库的 Entities,与 Domain Model 中 Entities 无关)。从一开始就是面向数据库的,最终业务都是围绕数据存储。以前项目中经常遇到有谈业务的时候,没两句直接会想到数据库存放,页面一个搜索框,能够联想到联合查询等,完全脱离不了数据库思维。
asanelder
2020-12-02 21:45:25 +08:00
@iamppz #29

俺就是用的 spring data jpa,但是也只是做 orm, m 和 domain object 还是要人工转化一下。

@hantsy #30

今天搞定 domain object 和 data object 的转化后,用充血模型写业务,有点爽啊~~~
dandankele
2023-04-19 14:35:40 +08:00
@asanelder 用 DDD 充血模型确实爽。。但我还卡在怎么用 jpa 将 data object 与 domain object 进行转化。。目前打算用的是 mapStruct 进行转化。。
另外还有个问题,spring data jpa 中的 repository 只是用来查询 data object 了吧?我觉得它的 repository 与 DDD 的 repository 其实不是同一个概念了。。

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

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

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

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

© 2021 V2EX