对象-关系模式

一、第一性原理:对象-关系失配的根本矛盾

在任何基于关系数据库的面向对象系统中,都不可避免地存在以下三类不可消除的结构张力

1. 身份语义不一致

问题本质:如何在跨事务、跨加载周期中保持“同一个对象”的语义一致。

2. 结构表达不一致

问题本质:如何在不破坏领域模型表达力的前提下进行持久化。

3. 生命周期不一致

问题本质:如何协调对象级操作与事务级提交。

所有对象-关系模式,都是对上述张力的局部缓解方案,而非根治手段。


二、对象-关系行为模式(解决“如何修改与加载”)

行为模式关注:对象如何被加载、修改、提交,以及这些行为如何与事务边界协同。

2.1 工作单元(Unit of Work)

根本问题

核心机制(抽象层)

常见实现策略(非本质)

系统代价

本质上,Unit of Work 是对象级变更 → 事务级提交的桥梁。


2.2 标识映射(Identity Map)

根本问题

核心机制

作用

系统代价

Identity Map 的本质是:在对象世界中重建关系世界的身份语义。


2.3 延迟加载(Lazy Load)

根本问题

抽象机制

常见实现形式

系统代价

Lazy Load 的本质是以不确定性换取性能与资源效率


三、对象-关系结构模式(解决“如何表示结构”)

结构模式关注:对象模型如何映射为关系结构而不扭曲领域含义。

3.1 标识域(Identity Field)

根本问题

核心机制

关键设计维度

标识的选择影响的不只是数据库结构,而是领域模型的稳定性


3.2 关联映射

外键映射

关联表映射

依赖映射

关联映射的核心是:不要让数据库结构反向污染领域模型。


3.3 嵌入值(Embedded Value)

根本问题

核心机制

嵌入值体现的是值语义优先于存储结构


3.4 继承映射模式

继承映射用于缓解:面向对象的继承层次与关系模型缺乏继承能力之间的冲突

三种经典策略

维度单表继承类表继承具体表继承
查询复杂度
空字段
Schema 演进困难灵活
ORM 复杂度

继承映射的选择,本质上是查询效率、演进能力与复杂度之间的权衡


四、对象-关系元数据与访问模式(解决“如何解耦”)

4.1 元数据映射

根本问题

两种策略

元数据的引入,是用间接层换取系统可演进性


4.2 查询对象(Query Object)

根本问题

核心机制

设计边界


4.3 资源库(Repository)

根本问题

核心定位

明确的非职责

Repository 的价值在于:保护领域模型不被基础设施侵蚀。

关联内容(自动生成)