Domain driven design 身份验证和用户任务
我正在考虑开发一个具有明确定义的领域的系统(主要是基于web的) 域的一部分包括诸如Domain driven design 身份验证和用户任务,domain-driven-design,Domain Driven Design,我正在考虑开发一个具有明确定义的领域的系统(主要是基于web的) 域的一部分包括诸如日记、预订、客户等实体 然而,我创建了另一个名为User的实体,其目的仅用于身份验证和授权(用特定于身份验证的数据污染Customer实体似乎是错误的)。我认为这不是“预订”领域的一部分,但具体来说,这应该属于应用层(我正在试用一个六边形体系结构) 我正在使用域模型中的接口访问存储库,并使用IoC将它们连接到持久层 我的问题是: 我应该在应用程序中输入身份验证/授权代码吗 把它放在域名之外 如果我把它排除在域之
日记
、预订
、客户
等实体
然而,我创建了另一个名为User
的实体,其目的仅用于身份验证和授权(用特定于身份验证的数据污染Customer
实体似乎是错误的)。我认为这不是“预订”领域的一部分,但具体来说,这应该属于应用层(我正在试用一个六边形体系结构)
我正在使用域模型中的接口访问存储库,并使用IoC将它们连接到持久层
我的问题是:
- 我应该在应用程序中输入身份验证/授权代码吗 把它放在域名之外
- 如果我把它排除在域之外,我应该为
在应用层(我认为这会 有道理吗UserRepository
- 如果我真的把它排除在域之外,我最终也会在应用层中使用名为
等的实体。这似乎是错误的User
我所做的是将身份验证/授权代码放在子域(辅助适配器)中,放在单独的项目中,因为它需要访问自己的持久性(在单独的RavenDB数据库中的一些集合),我将这些内容直接包含在单独的项目中,使它们与主持久性层分离。身份验证是一个通用域,而不是域的一部分。所以,是的,把它保存在应用层的某个组件中 并非系统的所有部分都应该遵循DDD模式。如果您认为UserRepository有好处,您可以使用它,但我只会使用您环境中一些已经可用的组件/流行库,如ASP.NET world中的MembershipProvider 我应该在应用程序中输入身份验证/授权代码吗 把它放在域名之外 不,您应该将身份验证/授权代码保留在核心域之外。它属于泛型子域 如果我把它排除在域之外,我应该为 应用层中的UserRepository(我认为这会使 感觉如何 您可以将UserRepository保留在域层中,但最好将“访问和识别”子域和“预订”核心域彼此分开。您可以使用不同的包或名称空间 下一个挑战是如何整合这两个领域。依我拙见,你可以:
干杯,我正在使用基于声明的身份验证,它使用RavenDB作为数据库。这是一个实验的结果,看看我是否可以在ASP.NETMVC项目中轻松地使用RavenDB作为身份验证数据库。我想我可以将身份验证持久性代码(可能也是逻辑)放在一个单独的项目(辅助适配器)中。第一个提示:不要使用存储库模式;)重读阿诺德·佐卡斯的那篇文章。我不确定一篇文章能有多大的可信度,在推广了不使用存储库之后,它会鼓励您在控制器中执行所有操作,包括将域实体作为视图模型传递。哎哟,DDD不是一颗银弹。在许多项目中,CRUD或贫血域模型是您所需要的一切。我可能会将其作为子域,然后将其公开给应用层。它将使所有加密助手、散列、salt类远离我的核心域。谢谢