【DDD】学习笔记-对象关系映射

领域模型的持久化

领域驱动设计强调对领域建模来应对业务复杂度,通过分层架构来隔离业务复杂度与技术复杂度,这就使得我们在考虑领域逻辑时,尽量规避对领域模型持久化的考虑,引入抽象的资源库正是为了解决这一问题。领域驱动设计的驱动力是领域逻辑而非数据库样式,因此是先有领域模型,然后再根据领域模型定义数据模型,此为领域模型驱动设计与数据模型驱动设计的根本区别。

对象关系映射

领域模型是面向对象的,数据模型是面向关系表的。倘若采用领域模型驱动设计,领域模型一方面充分地表达了系统的领域逻辑,同时它还将映射为数据模型,成为操作数据库的持久化对象。这就是采用面向对象设计编写基础设施层的持久化功能时,无法绕过的对象关系映射(Object Relationship Mapping,ORM)。

对象关系阻抗不匹配

如果持久化的数据库为关系数据库,就会出现所谓“对象关系阻抗不匹配”的问题。这种阻抗不匹配主要体现为以下三个方面:

  • 类型的阻抗不匹配:例如不同关系型数据库对浮点数的不同表示,字符串类型在数据库的最大长度约束等,又例如 Java 等语言的枚举内建类型本质上仍然属于基础类型,关系数据库中却没有对应的类型来匹配。
  • 样式的阻抗不匹配:领域模型与数据模型不具备一一对应的关系。领域模型是一个具有嵌套层次的对象图结构,数据模型在关系数据库中却是扁平的关系结构,要让数据库能够表示领域模型,就只能通过关系来变通地映射实现。
  • 对象模式的阻抗不匹配:面向对象的封装、继承与多态无法在关系数据库得到直观体现。通过封装可以定义一个高内聚的类来表达一个细粒度的基本概念,但数据表往往不这么设计;
  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农丁丁

你的认可是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值