主要观点:
- DDD 是强调领域及其逻辑重要性的软件开发方法,将其应用于数据库实体设计有难度,本文探讨用 Java Persistence API(JPA)实现 DDD 的原则和策略。
- 项目为单体结构且分成多个模块,各模块处理后端子领域,要尊重单一职责原则,使各子领域数据库实体共享单一数据库模式且避免实体纠缠。
- 核心原则包括对写数据应用单一职责原则,允许读重叠,无需应用复制,管理规范化数据库。
- 开始前的最佳实践包括将实体图设计为树状以利于 ORM 处理持久化和编写更好 SQL 等,还要掌握 ORM 的不同特性。
- 有用技巧包括设置某些属性为只读、处理关系时避免级联、可使实体和列名与数据库表镜像解耦,以及一些定义实体结构的注解。
- 单体结构且含子模块的项目存在一些弊端,如需处理 JPA 实体名冲突、多个
@PersistenceContext
的命名和扫描问题,以及测试和只读属性的处理。 - 遵循 DDD 和 SRP 原则开发 JPA 实体是创建可维护代码的有价值策略,但需深入理解 JPA 并注意潜在问题。
关键信息:
- 项目结构:单体分成多个 Maven 模块,各处理子领域,数据库实体共享模式。
- 核心原则:单一职责写数据、读重叠。
- 最佳实践:设计实体图为树、掌握 ORM 特性。
- 技巧:设置只读属性、处理关系、解耦实体和列名、使用注解。
- 弊端:JPA 实体名冲突、
@PersistenceContext
问题、测试和只读属性处理。
重要细节:
- 代码示例:通过
@Column(updatable=false, insertable=false)
设置属性只读,@OneToMany
处理关系时避免级联等。 - 关于注解:
@Embeddable
、@SecondaryTable
、@Inheritance(SINGLE_TABLE)
等注解的用途和注意事项。 - 测试问题:不同子领域隔离导致难以插入数据,需用低级访问或创建专门用于测试的数据填充实体模型。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。