사용자 정의 모델 바인더에서 객체를 검색 해야하는 경우 바인더가 서비스 계층, 저장소 레이어 또는…와 상호 작용해야합니까?

StackOverflow https://stackoverflow.com/questions/1119928

문제

이와 유사한 수업이있는 경우 :

public class Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public Pet myPet { get; set; }
}

사용자 정의 모델 바인더를 만들 때 내 양식의 게시물이 애완 동물로 보내지 않으면 다음과 같은 데이터를 보내줍니다. FirstName : "MyFirstName"LastName : "MyLastName"MyPet : "MyPetsName"

애완 동물의 이름이 실제 애완 동물 물체가 아닌 전달되므로 애완 동물 물체는 모델 바인더 내에서 검색되어야합니다.

내 질문은 모델 바인더가 서비스 계층, 저장소 레이어와 상호 작용해야합니까, 아니면 애완 동물을 검색해야합니까? 서비스 계층의 문제점은 서비스를 초기화 할 때 Modelstate에 액세스하지 않는 것 같습니다. ((this.modelstate) 오류가 발생합니다).

_petService = new PetService(new ModelStateWrapper(this.ModelState));

사람 객체를 만들기 위해 모델 바인더가 필요하다면 애완 동물에게 어떻게 든 할당되어야합니다 ... 어떻게해야합니까?

도움이 되었습니까?

해결책

내가하는 일은 비즈니스 대상에 바인딩하는 대신보기/프레젠테이션 모델을 사용하는 것입니다. 사용자가 유효하지 않은 값을 입력 할 수 있으며 실수를 수정하라는 메시지를 표시 할 때 사용자에게 이러한 잘못된 값을 다시 드리리스 플레이해야합니다. 그러나 귀하의 "실제"비즈니스 개체는 아마도 잘못된 값을 받아들이지 않을 것입니다. 따라서 View 모델은 사용자 입력을 허용해야하며 비즈니스 객체가 허용하지 않는 입력조차도 입력해야합니다.

이것은 바인딩을 쉽게 만듭니다. (유효한) 사용자 입력으로 비즈니스 객체를 업데이트 할 때만 바인딩하려면 저장소를 눌렀을 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top