DDD 中的聚合根持久化问题(使用关系型数据库)
你们在使用关系型数据库时怎么持久化聚合根的?
有没有好的思路和实践?
你们在使用关系型数据库时怎么持久化聚合根的?
有没有好的思路和实践?
之前没用过 jpa 和 ddd,俺也在摸索中。。。
谢谢铁子给的思路,俺慢慢尝试。
@CoderGeek 准备放弃 ddd 了。
最近觉着 ddd 倾向把问题复杂化,不敏捷。
搞了 2 个多星期的 DDD,一开始很不习惯,弄下来之后发现还是挺爽的
@imherer 我尝试好多次 ddd 了,总感觉不够 ddd 。它的“战略工具”确实可以,前阵跟着微服务有火了一把
之所以想实践 DDD,就是感觉之前做的所有 Web 无关是 CRUD,实在是受不鸟啦!
@huifer #12 俺在使用 spring data jpa 做持久化,持续摸索中。。。
@iamppz #17 确实是一个方法,但俺想利用 ORM 直接将数据库对象映射到聚合根,多做一次转换好麻烦啊
其实这种从领域对象到数据对象的转换就是因为关系型数据库中的数据模型无法完全匹配领域模型,而俺看 mongodb 的文档可以完全匹配,那么,是不是换成 mongodb 就没这种烦恼了呀
另外代码层面实现上,充分利用 Spring 特性,比如 ApplicationEvent 处理 Domain Event,Message Broker 来实现跨 Domain (不同的 BoundedContext )数据同步。
Domain 建模,Aggregate Root 的颗粒度源于实践,怎么具体处理,取决你的长期经验。经验需要不断积累,不断试错和踩坑,技术架构也是需要不断演进的。理论上很多东西一看就明白,落地很难,比如 Single Reponsibility 拿到国内,细化接口规范后,有些人就只会比较字符数量,便得出结论是增加了任务量。
例子: https://github.com/paucls/runbook-ddd-kotlin
文章提到的 Cargo 例子作为 Eric 原书 DDD 的一部分,使用了 Spring 框架,现在已经有各种版本了。
Eclipse EE4J 官方也维护了一个基于 Java EE/Jakarta EE 规范的 Cargotraker.
https://github.com/eclipse-ee4j/cargotracker
感谢二位铁子,文章俺都看了,也有一些思路了,正在实践中。。。
国内的实践,直到现在很多人做项目或者产品还是本末倒置,需求一到,数据库 Schema 优先设计,使用一些工具自动生成 Entities (或者什么框架需要的类似的东西,这只是数据库的 Entities,与 Domain Model 中 Entities 无关)。从一开始就是面向数据库的,最终业务都是围绕数据存储。以前项目中经常遇到有谈业务的时候,没两句直接会想到数据库存放,页面一个搜索框,能够联想到联合查询等,完全脱离不了数据库思维。
俺就是用的 spring data jpa,但是也只是做 orm, m 和 domain object 还是要人工转化一下。
@hantsy #30
今天搞定 domain object 和 data object 的转化后,用充血模型写业务,有点爽啊~~~