У меня есть страница регистрации, и я хотел бы выполнить некоторую проверку (в дополнение к аннотациям StringLength и Required в моей ViewModel) для дублированных имен пользователей и адресов электронной почты. В настоящее время я выполняю эту проверку в моем контроллере, когда форма регистрации отправляется обратно. Я не уверен, что это правильное место для этого.
Я не могу представить, что 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
Кажется, что использование логики проверки в контроллере имеет смысл, так как ее можно использовать повторно при удаленной проверке и при проверке модели при отправке. Это что-то вроде проверки на дубликаты, как правило, то, что должно быть сделано в контроллерах, или имеет смысл иметь такого рода проверки в доменной модели?
Спасибо