清洁架构和 DDD Java

问题描述 投票:0回答:1

我已经在许多模块中组织了我的 projet API,例如:每个模块的干净架构中的身份验证和订购

但是两个模块都与数据库中的同一个表用户交互

我是否必须在每个模块中复制 UserEntityJpa 或添加一个名为 Common 的新模块并将此 jpa 实体放入此 commonModule 中?

谢谢

domain-driven-design clean-architecture
1个回答
0
投票

两者都是权利。如你所愿。

但是,如果 UserEntityJpa 只是 Repository 或 DataLayer 类中的 DTO 或 POCO,则它将属于基础设施模块,例如 Infratructure.Repository 或 Infratructure.DataLayer。

如果您也将这个模块(我的意思是Infrasture.Repository)分为两个在领域层中具有相同分布的模块,您将面临您提到的公共表的问题,并且您可能需要这种类型的模块。就像 Infratructure.Repository.Common

我认为最重要的是领域/核心模块中的实体。 如果您要定义身份验证模块和订单模块,则定义两个域实体非常重要:每个模块一个。

  • 身份验证模块可以将用户视为帐户(身份验证标识符和可能的密码)。
  • 订单模块将用户视为客户,其中包含更多详细信息、电子邮件、地址...

每个模块在尝试创建相应的实体时,都可以使用同一个IUserRepository来填充Domain/Core层中需要的部分或归属实体。

如您所见,UserEntityJpa 只是数据库中数据的表示,它参与 Core 实体的构建,这不应该影响 Core 模块的设计。

我想指出,这是一种工作方式。一些开发人员不喜欢这种方法,更喜欢让存储库返回域实体并避免数据映射。它们是不同的思维方式,并不意味着一种是对的,另一种是错的。每个都有其优点和缺点。这取决于上下文。

注意:我在应用程序层中看到身份验证,在域/核心层中看到顺序。请看一下应用程序设计的垂直和水平分布。

© www.soinside.com 2019 - 2024. All rights reserved.