领域驱动设计(如何)和#x2B;实现(java)

领域驱动设计(如何)和#x2B;实现(java),java,jpa,domain-driven-design,Java,Jpa,Domain Driven Design,在过去的几天里,我读了很多关于DDD的文章,我不清楚我的测试设计中有哪些地方 我有一个场景,我有一个公司,它有两个地址es(账单和发货)。此地址仅属于此公司,因此不需要在多家公司之间共享。与此类似,我有用户,他有许多角色。同样,此角色仅属于此用户(角色为enum)。我应该如何在DDD中对此进行建模? 公司应将主地址和辅助地址作为元素(有值对象)?它们都是有价值的对象还是实体?用户实体中的角色又是什么?这里是角色值对象还是实体(更好) 如果我想使用java(例如使用JPA)实现这一点,最终的结果是

在过去的几天里,我读了很多关于DDD的文章,我不清楚我的测试设计中有哪些地方

我有一个场景,我有一个公司,它有两个地址es(账单和发货)。此地址仅属于此公司,因此不需要在多家公司之间共享。与此类似,我有用户,他有许多角色。同样,此角色仅属于此用户(角色为enum)。我应该如何在DDD中对此进行建模? 公司应将主地址和辅助地址作为元素(有值对象)?它们都是有价值的对象还是实体?用户实体中的角色又是什么?这里是角色值对象还是实体(更好)

如果我想使用java(例如使用JPA)实现这一点,最终的结果是什么?我是否应该将元素(地址和角色)创建为一组有值对象,以便它们位于单独的表中


谢谢阅读你的问题,我相信你混淆了一些概念。DDD是关于设计应用程序以将其域封装在对象和行为中。它与数据建模(应用程序的数据库层)无关

对于一个应用程序,地址可以是值对象,但对于其他应用程序,地址可以是实体。它取决于应用程序中封装的域和概念。这个角色也一样

我知道这不是你想要的答案。但我认为澄清这些概念以避免未来的错误是很重要的。为了给你一个关于建模的建议的答案,需要更多关于你的系统和映射的用例的输入

作为建议,我相信您已经阅读了Eric Evans的领域驱动设计书。无论如何,这是一本很棒的书

希望有帮助!:)

编辑1:

嗯。我假设您希望您的公司是地址的聚合。从DDD的角度来看,它们是否在一个表中并不重要。重要的是使用聚合的概念,不要让任何人直接访问地址,而是通过公司访问。您可以使用访问方法正确地实现这一点

对于用户和角色,我不会将用户编码为角色的聚合器


注意:我读了你提到的链接,我注意到它的代码示例没有使用JPA或任何类似的东西。它建议您按id而不是按对象引用引用其他聚合。但是在使用JPA时,不推荐使用这种技术。

我更多地考虑了和之类的东西。在这里,作者将讲述设计并提供一些代码。所以对我来说,如果有人能从他的角度告诉我他的观点,那会很有帮助。我想知道开发人员是如何解决这个问题的。我不认为在不了解更多您正在建模的领域的情况下,我可以给出一些代码示例。我用一些个人想法编辑了我的答案。希望有帮助!