知识卡片
对象关系映射的三类阻抗不匹配
内容
领域建模用对象范式、存储用关系数据库时,领域模型面向对象、数据模型面向关系表,要持久化就需为对象与关系建立映射(ORM)。对象与关系存在”阻抗不匹配”,主要体现为三方面:①类型的阻抗不匹配——如不同库对浮点数表示不同、字符串最大长度约束,又如Java枚举本质是基本类型而关系库没有对应类型;②样式的阻抗不匹配——领域模型是有嵌套层次的对象图,数据模型是扁平关系结构,二者不一一对应,只能靠关系变通映射;③对象模式的阻抗不匹配——封装、继承、多态无法在关系库直观体现,数据表只有组合关系、无法表达继承,因而无法满足Liskov替换与多态。发散:三类阻抗分别对应下文JPA的三组应对手段(类型注解、@OneToMany/@Embedded样式映射、继承三策略),可对照记忆。
参考来源
- 位置:《解构领域驱动设计》第19章 19.2.1(源文件:_epub-src/OEBPS/032.xhtml)
- 结论依据:原文列出类型、样式、对象模式三类阻抗不匹配。
- 原始内容:对象与关系往往存在"阻抗不匹配"的问题,主要体现为以下3个方面。