域驱动开发中hibernate中多个有界上下文间的实体共享

域驱动开发中hibernate中多个有界上下文间的实体共享,hibernate,jpa,entity,domain-driven-design,Hibernate,Jpa,Entity,Domain Driven Design,我目前正在学习领域驱动开发(DDD)。看了一些教程之后,我想对我的老学校项目从CLASICSOA到DDD进行建模。我确定了3个限定的上下文(目前):秘书管理(学生和教授的CRUD)、教授任务(为学生创建任务)和学生任务(上传任务解决方案)。名称选择不正确,这只是应用程序的概述 重点是将有两个不同的教授实体:一个在管理中,包含姓名、地址、电子邮件和其他内容;另一个在教授任务中,包含id和姓名 我的问题是如何使用hibernate和JPA对此进行建模?我在考虑创建一个包,其中包含应用程序中的所有实体

我目前正在学习领域驱动开发(DDD)。看了一些教程之后,我想对我的老学校项目从CLASICSOA到DDD进行建模。我确定了3个限定的上下文(目前):秘书管理(学生和教授的CRUD)、教授任务(为学生创建任务)和学生任务(上传任务解决方案)。名称选择不正确,这只是应用程序的概述

重点是将有两个不同的教授实体:一个在管理中,包含姓名、地址、电子邮件和其他内容;另一个在教授任务中,包含id和姓名

我的问题是如何使用hibernate和JPA对此进行建模?我在考虑创建一个包,其中包含应用程序中的所有实体,用JPA注释进行注释,每个实体都有所有必需的字段,并且在每个有界上下文中都有其他类,这些类只包含该有界上下文中必需的字段。存储库必须从该特定类映射到JPA实体。有没有更好的解决办法


谢谢。

不要在有界上下文之间共享您的持久性。您可以在应该通过设计解耦的对象上创建耦合

如果你有“这是同一件事”的感觉——重新考虑你的语境边界。可能您需要合并它们。如果有什么东西阻止了拆分,您可能破坏了内聚,但您的有界上下文必须具有高内聚


通常,不同的有界上下文有不同的关注点,即使在现实生活中是相同的。在这种情况下,同名的域对象看起来会完全不同。这就是为什么它们被称为“有界上下文”,因为单词在不同的上下文中有不同的含义。

您打算在同一个应用程序中部署所有3个有界上下文,还是将每个上下文都视为自己的可部署上下文(可能是微服务)?我将在同一个应用程序中部署它们,在不同的包或不同的模块中,为什么不映射每个BC中的各个类?卑诗省也是一个技术边界,应该为它选择合适的工具。我不能这样做,因为即使一个卑诗省的教授与另一个卑诗省的教授不同,最终他们只指一个教授。如果有两个类映射到两个不同的表,那么每次更新另一个表时,我都会更新一个表。如果这就是你在评论中的意思。大多数DDD从业者强烈建议不要分发(共享)实体。本质上,这意味着一个实体应该被限制在单个有界上下文中单个域中的单个类中。