DDD,不同的域模型可以依赖于同一组表

时间:2015-04-15 15:37:35

标签: domain-driven-design persistence

在DDD中,指南指出域模型不应该与持久性有关。这意味着不同的域模型可能依赖于相同的表。同时,由于ORM在转换模型中的技术限制(我想?),这个目标似乎很难实现。有没有办法,通过实际的ORM,创建依赖于数据库中相同表的非常特定的域模型,并防止99.99%的DDD实现中实体和表之间的令人失望的[1:1]映射?这些技术限制(?)是否使指南过时了?

谢谢,

4 个答案:

答案 0 :(得分:2)

实体和表之间的“令人失望的[1:1]映射”可能会以两种方式让您失望 - 无法从多个表填充实体,也无法从同一个表中填充多个实体。< / p>

由于您似乎对后者更感兴趣,因此对于大多数ORM来说都是可能的,即使只是通过在ORM的单独映射“实例”中为一个表定义不同的映射。描述了实体框架的解决方案herehere

答案 1 :(得分:1)

我想答案取决于您的域模型与数据库表的不同之处。有时您可能无法单独使用ORM来实现DDD持久性。这不应该阻止您或让您在数据库周围设计域模型。这也是DDD具有存储库接口概念的原因,因为存在模型的任务可能非常复杂。

该指南现在不再比最初编写时过时。 ORM可能与本指南兼容,也可能不兼容,但并不意味着使用其他方法无法实现。

我同意您的评估,即大多数DDD模型都是数据库的1:1镜像。简短的回答是,持久性并不总是容易的,但绝不是不可能的。

答案 2 :(得分:1)

如果您使用Java,则可以使用遵循Data Mapper模式的MyBatis来实现这一目标。

答案 3 :(得分:0)

DDD中的一个关键思想是有界上下文,其中包含以下几个内容:

  • 无所不在的语言
  • 聚合根
  • 实体
  • 域名服务
  • 域名活动
  • 数据库表

DDD可能会出现两种情况,具体取决于天气,项目是绿色领域还是褐色。

  • 在一个绿色的现场项目中,使用DDD完成所有操作,将有明确的子域,清晰的有界上下文,您将拥有被认为在有界上下文中的数据库表,并且您将获得表之间的1:1映射你使用JPA / Hibernate ......等等的实体。
  • 在具有无法更改的现有数据库的棕色字段项目中,一个数据库可以支持多个有界上下文,并且某些表可能将其列的不同部分映射到不同有界上下文中的不同域实体。

在第34页至第68页的书中,#34;实施领域驱动设计&#34;作者:Vaughn Vernon。