Skip to content

ORM

ORM 是 Object-Relational Mapping 的简称。这是一种访问关系型数据的模式,通过一个ORM框架,将内存中的对象和数据库的关系型对象之间映射起来,这样只需要在内存中操作对象,就可以通过ORM工具去操作关系型数据库的数据了。

实现DDD必须得采用ORM吗?

不是必须的。ORM和DDD没有必然的关系。不使用ORM也完全可以实现DDD。

那用ORM来实现DDD有什么好处?

ORM确实对于实现聚合的持久化很有帮助:

  • 延迟加载 我们期望聚合载入内存中后,对外是一个完整可用的对象,有些时候,确实会存在载入数据过多,导致性能损失的情况,ORM的延迟加载有助于解决这种问题
  • 变更追踪 当聚合发生变更后,要么全量更新整个聚合的状态数据到数据库,要么比对之后增量更新。ORM提供的变更追踪,正好可以自动完成增量更新,减少手动比对的开发量,比全量更新性能更好
  • 一级缓存 确保在同一个事务中,查询映射到同一个id的数据库记录时,再内存中只有一个对象。在DDD实现场景中,减少同一个命令执行过程中,多次载入同一个聚合,载入了不同的对象,导致最终相互覆盖冲突等问题。
  • 面向对象操作,大大简化了数据库操作,让建模和模型实现的时候,都更容易关注于对象本身。不使用ORM的时候,更容易引起开发面向数据库写各种局部 update select的sql

采用ORM的缺点是什么?

有些ORM框架的映射能力不足,导致使用这个ORM框架的时候,对聚合的内部结构有更严格的要求,进一步导致设计聚合变得更不灵活。这种时候,需要考虑采用这样的框架是否值得。