
1 xuanbg Dec 1, 2020 不是你的数据模型设计错了,就是你的领域模型设计错了…… |
2 xiangwan Dec 1, 2020 via Android 了解下领域模型和数据模型解耦合 |
3 asanelder OP |
4 xiangwan Dec 1, 2020 via Android 领悟模型有人也叫成业务模型,对象模型,可以换着搜搜 有个解藕思路是,在仓储层转换领域对象和数据对象 主要是转换下思维,不执意让数据表和领域模型完全对应。可以像上面提到的,在数据访问层进行转换 |
5 asanelder OP |
6 CoderGeek Dec 1, 2020 我最近也在搞 ddd 费劲 |
10 xiangwan Dec 2, 2020 via Android |
12 huifer Dec 2, 2020 聚合根是否需要落地是个问题. 有些可能是联合查询对外暴露, 聚合根落地的话简单的形式就是各个外键 id 存储 |
13 asanelder OP |
14 CoderGeek Dec 2, 2020 @xiangwan 我的想法是没有所谓绝对标准,不管什么架构模式都是一步步沉淀的 还是得明白业务领域,不说写什么的问题,起码前期梳理的全面 大模块不会跑偏, 这个东西确实需要有一定沉淀的业务人员和技术人员 要么连好事都算不上 浪费时间 |
16 leoskey Dec 2, 2020 我是参考 https://www.cnblogs.com/uoyo/p/12167224.html 的实践,有些落地难得地方需要妥协 |
17 iamppz Dec 2, 2020 聚合根和数据库对象之间通过 Converter 来 serialize 和 deserialize |
18 asanelder OP |
19 asanelder OP |
20 hantsy Dec 2, 2020 技术上使用 Spring Data 的话,它已经抽象了 DomainEvent,AggregrateRoot 处理,适用大多数 Spring Data 子项目,包括 Spring Data JPA, 请参考 Spring Data 文档。 https://docs.spring.io/spring-data/data-commons/docs/current/api/org/springframework/data/domain/DomainEvents.html https://docs.spring.io/spring-data/data-commons/docs/current/api/org/springframework/data/domain/AbstractAggregateRoot.html 另外代码层面实现上,充分利用 Spring 特性,比如 ApplicationEvent 处理 Domain Event,Message Broker 来实现跨 Domain (不同的 BoundedContext )数据同步。 Domain 建模,Aggregate Root 的颗粒度源于实践,怎么具体处理,取决你的长期经验。经验需要不断积累,不断试错和踩坑,技术架构也是需要不断演进的。理论上很多东西一看就明白,落地很难,比如 Single Reponsibility 拿到国内,细化接口规范后,有些人就只会比较字符数量,便得出结论是增加了任务量。 |
21 hantsy Dec 2, 2020 |
22 hantsy Dec 2, 2020 Spring Data @DomainEvents 的使用,https://www.baeldung.com/spring-data-ddd |
23 kvkboy Dec 2, 2020 |
25 hantsy Dec 2, 2020 @kvkboy 六边形和洋葱不错,特别六边形,把系统进出接口进行隔离,感观比较清晰。 文章提到的 Cargo 例子作为 Eric 原书 DDD 的一部分,使用了 Spring 框架,现在已经有各种版本了。 Eclipse EE4J 官方也维护了一个基于 Java EE/Jakarta EE 规范的 Cargotraker. https://github.com/eclipse-ee4j/cargotracker |
26 hantsy Dec 2, 2020 |
28 Kirsk Dec 2, 2020 via Android Ddd 是业务建模 不是数据建模 不懂业务还是不要玩 |
30 hantsy Dec 2, 2020 @iamppz 理想的设计层面,Domain 建模不会考虑到数据库,到真正实现的时候才考虑。如果 Domain 模型与数据库有关系,就是 DDD 中的 Entity,最终要持久化,不得不考虑到数据库的问题。 国内的实践,直到现在很多人做项目或者产品还是本末倒置,需求一到,数据库 Schema 优先设计,使用一些工具自动生成 Entities (或者什么框架需要的类似的东西,这只是数据库的 Entities,与 Domain Model 中 Entities 无关)。从一开始就是面向数据库的,最终业务都是围绕数据存储。以前项目中经常遇到有谈业务的时候,没两句直接会想到数据库存放,页面一个搜索框,能够联想到联合查询等,完全脱离不了数据库思维。 |
31 asanelder OP |
32 dandankele Apr 19, 2023 @asanelder 用 DDD 充血模型确实爽。。但我还卡在怎么用 jpa 将 data object 与 domain object 进行转化。。目前打算用的是 mapStruct 进行转化。。 另外还有个问题,spring data jpa 中的 repository 只是用来查询 data object 了吧?我觉得它的 repository 与 DDD 的 repository 其实不是同一个概念了。。 |