【发布时间】:2019-05-08 20:57:13
【问题描述】:
我正在关注Microsoft Architecture Guide 创建一个 ASP.NET Core Web 应用程序。
该指南实现了非常简单的干净架构模式。
如果您查看使用干净架构模式的示例项目,您会看到有一个包含 ApplicationUser.cs 类的 Infrastructure/Identity 文件夹。
我的问题:
我正在使用实体框架,我在 ApplicationCore 类库中的一个业务实体需要包含一个 ApplicationUser 列表。 ApplicationCore 库不应引用任何其他项目。它包含所有接口和业务实体。如何在我的 Infrastructure/Identity 项目中保留 ApplicationUser 类,并且仍然在 ApplicationCore 项目中的一个业务实体中使用它而不违反规则。
我知道一种解决方案是不在我的基础架构项目中存储 ApplicationUser 实体。但是,我觉得它应该存在,因为它在实现 IdentityUser 时将始终依赖于 Identity。
【问题讨论】:
-
它在基础设施中,因为 ApplicationUser 继承了 IdentityUser 的形式,即 身份验证,身份验证是基础设施问题。您永远不应该将身份验证放入您的核心域,因为(几乎)世界上没有任何企业拥有
User无处不在的语言、流程等。当您拥有一家商店时,您就拥有了客户,但没有用户。用户是一个技术术语。用户可能与客户相关(即用户 ID 和客户 ID 可能相同或通过 1:1 或 n:1 关系连接)。因为可以删除或阻止用户,但保留客户 -
另请参阅 GitHub 上的 this issue 以了解它的说明。您应该记住,eShopOnContainers 不仅是一个干净的架构,还涉及领域驱动设计和使用无处不在的语言的 ddd 等主题(这是公司的领域专家所说的,比如销售人员、市场营销、不是软件开发人员)是必要的。从技术上讲,用户只是识别/验证用户身份的一种手段,因此客户永远不会与用户相同
-
因为您知道,当通过传真或电话接受订单时,您可以拥有没有登录的客户
标签: c# asp.net-core asp.net-core-mvc entity-framework-core clean-architecture