【发布时间】:2014-02-14 15:37:08
【问题描述】:
我打算在我的一个应用程序中使用域驱动设计,并且对用户身份验证有一些疑问。
我有一个名为 User 的聚合根,其中包含 UserCredentials、Password、ActivationToken 等值对象. 我也很少有用于管理用户的域服务。 例如 UserRegistration 服务如下所示:
public interface IUserRegistrationService
{
IEnumerable<string> Register(NewUserRequest request);
}
它检查分配给用户注册过程的业务规则并将用户持久保存在数据库中。
现在我要对用户进行身份验证,所以我创建了 UserAuthentication 域服务:
public interface UserAuthenticationService
{
IEnumerable<string> Authenticate(AuthRequest request);
}
它从存储库中获取用户,检查业务规则,更新和持久化用户数据更改,如 LastLoginDate。
但是我有一些疑问,如果身份验证过程属于域本身还是应该属于应用程序服务,至于我的域,用户的身份验证方式并不重要。 但另一方面,在此服务中检查的身份验证规则属于我的域规则,因此它们是我域的组成部分。
那么您在基于 DDD 的应用程序中将身份验证放在哪里?您对此问题的解决方案是什么?
【问题讨论】:
标签: c# authentication domain-driven-design domain-service-class