나는 여기에 근본적인 것이 빠져 있다고 생각한다. 그러나 나는 두 시간 이상 파고 있었고 명백한 것을 간과해야만한다. 그렇다면 사과드립니다.서비스 확인은 컨트롤러로 어떻게 다시 전달됩니까?
나는 MVC 3 사이트를 가지고 있으며 내 컨트롤러와 통신하는 서비스 레이어와 서비스 레이어가 말하는 저장소 (IoC 컨테이너를 사용하여 모두 디커플링되었지만 여기서는 관련이 없다)가있다. 내 도메인 모델은 컨트롤러, 서비스 및 리포지토리간에 공유되는 EF4 엔터티입니다.
이public class SignupViewModel
{
[DisplayName("Email")]
[Required, RegularExpression(@"^[email protected]+\..+$")]
public string Email { get; set; }
[DisplayName("Password")]
[Required]
public string Password { get; set; }
[DisplayName("Confirm password")]
[Required, Compare("Password")]
public string PasswordConfirmation { get; set; }
}
내 사용자의 도메인 모델은 다음과 같은 : :
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public string PasswordSalt { get; set; }
}
내가하는 데 사용되는 서비스 방법을
나는 이런 식으로 뭔가를 보이는 가입에 대한 뷰 모델을 가지고 다음과 같은 사용자를 등록하십시오.
public void Register(User user, string planTextPassword)
{
//Make sure the email address is not taken.
bool emailIsTaken = IsEmailTaken(user.Email);
if (emailIsTaken)
{
//What do I do here?
}
else
{
//Create the user.
}
}
그리고 마지막으로 내 컨트롤러 a ction 특 모두 함께 그것을 넥타이 :
내 서비스 방법에서 주석에서 볼 수 있듯이public ActionResult Signup(SignupViewModel signupViewModel)
{
if (ModelState.IsValid)
{
_accountService.Register(Mapper.Map<SignupViewModel, User>(signupViewModel), signupViewModel.Password);
_unitOfWork.Commit();
}
return View(signupViewModel);
}
, 서비스 수준 검증이 실패했을 경우 어떻게해야합니까? this question에서 논의했듯이 예외를 던져서는 안됩니다. 그러나 Ryan이 제안하는 내용을 따르는 지, 또는 여전히 적용 가능한지 (예 : 현재 MVC 3 또는 Fluent Validation과 같은 다른 도구로 처리 할 수있는 더 나은 방법이 있는지) 확실하지 않습니다.
내가 말했듯이, 나는이 시점에서 나무를위한 숲을 볼 수는 없다고 생각하지만 마지막 2 ~ 3 시간을 혼자서 알아 내려고 노력하면서 나는 더 나은 행운을 가질 것이라고 생각했다. 그냥 질문을.
미리 감사드립니다.
좋은 답변입니다. 두 가지 접근법을 모두 시도한 사람의 의견을 듣는 것이 좋았으며 샘플이 확실히 도움이 될 것입니다. –