我无法想象ViewModel是正确的位置,因为它需要ViewModel引用我的UserRepository。将这种验证放在模型类中是否有意义?
如果有的话,我该如何在模型上实现它,以便在将其发送到我的存储库之前检查信息是否有效?
更新:
我的控制器操作代码:
if (ModelState.IsValid)
{
if (!_userRepository.Exists(registerViewModel.Username))
{
if (!_userRepository.EmailExists(registerViewModel.Email))
{
_userRepository.Add(
new User
{
Created = DateTime.Now,
Email = registerViewModel.Email,
Password = registerViewModel.Password,
Username = registerViewModel.Username
});
_userRepository.SaveChanges();
TempData["registrationDetails"] = registerViewModel;
return RedirectToAction("Confirm");
}
else
{
ModelState.AddModelError(string.Empty, "This email address is already in use.");
}
}
else
{
ModelState.AddModelError(string.Empty, "This username is already taken.");
}
}
return View(registerViewModel);
}
更新2
领域模型是否应该关心重复的用户名或电子邮件地址等约束条件,还是这是控制器层应该担心的事情?
更新3
将验证逻辑放在控制器中似乎是最有意义的,因为它可以在远程验证和提交时的模型验证中重复使用。检查重复项之类的操作通常应该在控制器中完成,还是在领域模型中进行这些检查有意义呢?
谢谢。