登録ページがあり、(ViewModel の StringLength および Required アノテーションに加えて) 重複するユーザー名と電子メール アドレスに対していくつかの検証を実行したいと考えています。現在、登録フォームがポストバックされたときに、コントローラーでこの検証を実行しています。ただし、これが適切な場所であるかどうかはわかりません。
ViewModel が UserRepository への参照を持つ必要があるため、ViewModel が適切な場所であるとは想像できません。モデルクラスでこの種の検証を行うことは理にかなっていますか?
もしそうなら、これをモデルに実装して、リポジトリに送信する前に情報が有効かどうかを確認するにはどうすればよいですか?
アップデート
私のコントローラーアクションのコード:
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
リモート検証や送信時のモデル検証で再利用できるため、コントローラーに検証ロジックを配置するのが最も理にかなっているようです。重複をチェックするようなことは、一般的にコントローラーで行うべきことですか、それともドメイン モデルでこの種のチェックを行うことは理にかなっていますか?
ありがとう、