JPA实体和DDD实体应该属于同一类吗?

Vyt*_*nis 6 orm domain-driven-design jpa mybatis mybatis-generator

根据DDD,有些类是实体,有些类具有@javax.persistence.Entity注释。他们应该是同一班吗?还是JPA实体应仅充当映射器(https://martinfowler.com/eaaCatalog/dataMapper.html)从数据库加载DDD实体(并将其存储)并保留在域模型之外的机制?

如果将数据库元数据分离并存储在外部(例如,以XML格式),会有所不同吗?如果此类是实体,边界在哪里?我认为从XSD(例如,使用JAXB)甚至使用MyBatis Generator从数据库生成的类都不是DDD中所理解的实体。

pla*_*alx 6

这真的是一个实现细节。它们可能是也可能不是,这取决于您的 ORM 的灵活性。例如,如果您的 ORM 允许映射您的域对象而不会因持久性问题而污染它们,那么这种方法需要较少的开销并且我会采用这种方法。

另一方面,如果您的 ORM 不够灵活,那么您可以采用实用的混合方法,其中您的 AR 和它的状态是两个不同的类,并且状态类足够简单,可以轻松映射。请注意,AR 仍将负责保护此处的状态,并且不会从 AR 外部直接访问状态对象。Vaughn Vernon在此处描述了该方法。