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