Domain driven design 身份验证和用户任务

Domain driven design 身份验证和用户任务,domain-driven-design,Domain Driven Design,我正在考虑开发一个具有明确定义的领域的系统(主要是基于web的) 域的一部分包括诸如日记、预订、客户等实体 然而,我创建了另一个名为User的实体,其目的仅用于身份验证和授权(用特定于身份验证的数据污染Customer实体似乎是错误的)。我认为这不是“预订”领域的一部分,但具体来说,这应该属于应用层(我正在试用一个六边形体系结构) 我正在使用域模型中的接口访问存储库,并使用IoC将它们连接到持久层 我的问题是: 我应该在应用程序中输入身份验证/授权代码吗 把它放在域名之外 如果我把它排除在域之

我正在考虑开发一个具有明确定义的领域的系统(主要是基于web的)

域的一部分包括诸如
日记
预订
客户
等实体

然而,我创建了另一个名为
User
的实体,其目的仅用于身份验证和授权(用特定于身份验证的数据污染
Customer
实体似乎是错误的)。我认为这不是“预订”领域的一部分,但具体来说,这应该属于应用层(我正在试用一个六边形体系结构)

我正在使用域模型中的接口访问存储库,并使用IoC将它们连接到持久层

我的问题是:

  • 我应该在应用程序中输入身份验证/授权代码吗 把它放在域名之外

  • 如果我把它排除在域之外,我应该为
    UserRepository
    在应用层(我认为这会 有道理吗

  • 如果我真的把它排除在域之外,我最终也会在应用层中使用名为
    User
    等的实体。这似乎是错误的

人们的想法是什么

[编辑]

我想从两个答案中找出一个解决方案,谢谢你们的回答,我对你们两个都非常满意


我所做的是将身份验证/授权代码放在子域(辅助适配器)中,放在单独的项目中,因为它需要访问自己的持久性(在单独的RavenDB数据库中的一些集合),我将这些内容直接包含在单独的项目中,使它们与主持久性层分离。

身份验证是一个通用域,而不是域的一部分。所以,是的,把它保存在应用层的某个组件中

并非系统的所有部分都应该遵循DDD模式。如果您认为UserRepository有好处,您可以使用它,但我只会使用您环境中一些已经可用的组件/流行库,如ASP.NET world中的MembershipProvider

我应该在应用程序中输入身份验证/授权代码吗 把它放在域名之外

不,您应该将身份验证/授权代码保留在核心域之外。它属于泛型子域

如果我把它排除在域之外,我应该为 应用层中的UserRepository(我认为这会使 感觉如何

您可以将UserRepository保留在域层中,但最好将“访问和识别”子域和“预订”核心域彼此分开。您可以使用不同的包或名称空间

下一个挑战是如何整合这两个领域。依我拙见,你可以:

  • 将“访问和标识”子域中的DomainService公开给应用层,以便做出身份验证/授权决策
  • 有时我们必须找出谁做了日记和预订,在这种情况下,使用用户的标识符就足够了。“订票”核心领域通常不需要“收藏标签”之类的其他信息

  • 干杯,我正在使用基于声明的身份验证,它使用RavenDB作为数据库。这是一个实验的结果,看看我是否可以在ASP.NETMVC项目中轻松地使用RavenDB作为身份验证数据库。我想我可以将身份验证持久性代码(可能也是逻辑)放在一个单独的项目(辅助适配器)中。第一个提示:不要使用存储库模式;)重读阿诺德·佐卡斯的那篇文章。我不确定一篇文章能有多大的可信度,在推广了不使用存储库之后,它会鼓励您在控制器中执行所有操作,包括将域实体作为视图模型传递。哎哟,DDD不是一颗银弹。在许多项目中,CRUD或贫血域模型是您所需要的一切。我可能会将其作为子域,然后将其公开给应用层。它将使所有加密助手、散列、salt类远离我的核心域。谢谢