문제

MVC를 사용하고 데이터를 ViewModels로 변환 할 때이 작업을 수행하는 방법이 있습니까?

현재 Automapper를 사용 하여이 작업을 잘 수행하고 있습니다. 그러나 블로그 기사에서 볼 수있었습니다 (Rob C라고 생각합니다) 뷰 모델에 생성자가있어 필요한 매개 변수 수를 가져온 다음 ViewModel을 생성합니다.

예를 들어 var RetViewModel = new ViewModel(MyObject);

이것은 괜찮은 방법 인 것 같습니다.

도움이 되었습니까?

해결책

"수용 방식"은 일반적으로 당신에게 가장 적합한 방식입니다.

나는 Automapper에 대해 들어 본 적이없고 그것을 조사 할 때, 내가 얻은 것은 특정 컨벤션을 따라 마법의 물체 매핑을 만드는 것이 었습니다.

스크린 캐스트 : http://www.dnrtv.com/default.aspx?hownum=155

참고 : 스크린 캐스트의 절반 만 보았으므로 Automapper에 대한 내 생각은 다소 불완전합니다.

객체 속성 (코드, IMO, 생성자 로직에서 남은 왼쪽) 사이에 추가 코드를 작성해야하기 때문에 개인적으로 사용하고 싶지 않습니다. Screencast 예제에서, 그 코드는 일반적으로 팽창으로 이어질 수있는 컨트롤러의 동작 방법에 배치됩니다. (나는 스키니 컨트롤러/액션을 좋아합니다)

나는 당신이 당신의 게시물에 제공 한 메소드를 사용하고, 모델의 생성자가 객체를 가져 와서 모든 작업을 수행하도록합니다.

또한 항상 ViewModel 객체의 속성 값을 수동으로 설정할 수 있도록 매개 변수가없는 빈 생성자를 만듭니다.

예시:

CustomViewModel myModle = new CustomViewModle
{
    Property1 = "Something",
    Property2 = 3,
    //etc..
};

요약하려면 두 가지 방법을 모두 시도하고 자신에게 맞는 것이 무엇인지 확인하십시오. Automapper는 훌륭한 아이디어이며 많은 상황에서 도움을 줄 수 있지만, 사용하면 객체 생성기를 사용하는 경우 사용하여 많은 코드를 작성할 것이라고 생각합니다.

다른 팁

글쎄, "공식적으로 권장되는"접근 방식은 모델 바인딩 메커니즘이이를 처리하도록하는 것입니다. 그것은 더 간단하고 프로세스를 자동화합니다. 이 모델은 바인더가 초기화 할 수 있도록 읽기를 읽기 위해 속성을 노출시켜야합니다.

두 번째 옵션에 대해 말하는 옵션은 아마도 모델을 불변의 대상으로 만드는 데 도움이 될 것입니다. 즉, 모든 속성을 읽기 전용으로 만들고 생성자 매개 변수를 통해 한 번 초기화합니다. 이를 위해서는 제출 된 값을 꺼내기 위해 FormCollection을 직접 조사해야합니다. 그것은 더 많은 일이지만 한 가지 유형의 방어 프로그래밍과 같은 고유 한 장점이 있습니다.

나는 어느 길이 더 나은지 말할 수 없으며 둘 다 옵션입니다. 나는 개인적으로 두 번째 스타일을 선호합니다.

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