2010-05-31 3 views
4

winforms에서 MVP 패턴을 구현할 때 너무 많은 속성, setter 및 getter가있는 부 풀린 뷰 인터페이스를 자주 발견합니다. 뷰에서 노출 된 사용 가능하고 가시적 인 특성을 모두 갖는 3 개의 버튼 및 7 개의 텍스트 상자가있는보기가있는 쉬운 예입니다. 이것에 대한 검증 결과를 추가하면 40ish 속성을 가진 인터페이스로 쉽게 끝날 수 있습니다. 프레젠테이션 모델을 사용하면 같은 수의 속성을 가진 모델도있을 수 있습니다.MVP, WinForms - 비 대한 뷰, 발표자 및 프리젠 테이션 모델을 피하는 방법

모든 값을 앞뒤로 전달하는 비 대한 발표자 로직을 사용하지 않고도 뷰와 프리젠 테이션 모델을 쉽게 동기화 할 수 있습니까? (해당 80ish 라인 발표자 코드를 사용하여 모델을 모의하는 발표자 테스트를 상상해보십시오. 코드를 보면 160cm 줄의 코드가 전송됩니다.) winforms 데이터 바인딩을 사용하지 않고도이를 처리 할 수있는 프레임 워크가 있습니까? (winforms보기와 다른보기를 사용하고 싶을 수도 있습니다. 일부에 따르면이 동기화는 발표자 작업이되어야합니다 ..) AutoMapper를 사용 하시겠습니까?

어쩌면 잘못된 질문을 메신저하지만

+0

가능한 중복 [Windows Forms과 MVC 구현] (0120)을 참조하십시오. –

+1

중복 된 것으로 생각하지 않습니다. 나는 iv가 그 스레드와 모든 참조에서 모든 것을 읽었다 고 생각한다. 이 "bloating"문제를 해결하는 것과 관련된 질문에 대한 답변을 나에게 가르쳐 주실 수 있다면 해주십시오. – MatteS

답변

3

이것은 단지 하나의 생각입니다 ... MVP는 쉽게 여기에 몇 가지 좋은 해결책이없는 비 대한 얻는다 나에게 것, 그리고 어떤 사람들은 그것을 좋아하지 않을 수도 있습니다 어디 알 -가 여기에서 할 수있는 많은 다른 것들입니다.

많은 상용구 코드를 사용하고 있다면 캡슐화하십시오. 다음보기에서

public class UiField<ContentType> 
{ 
    public bool IsEnabled { get; set; } 
    public ContentType Value { get; set; } 
    public bool IsVisible { get; set; } 
} 

:

public interface ISampleView 
{ 
    UiField<bool> IsStaffFullTime { get; set; } 
    UiField<string> StaffName { get; set; } 
    UiField<string> JobTitle { get; set; } 
    UiField<int> StaffAge { get; set; } 
    UiField<IList<string>> Certifications { get; set; } 
} 

다음은 각 필드와 관련된 다양한 속성을 마무리.

덧붙여서, 테스트를 위해 이러한 인터페이스를 손으로 스텁하지 말 것을 제안합니다. 조롱 프레임 워크를 사용하십시오.

+0

발표자 모델은 거의 똑같이 보일까요? 이보기 및/또는 모델로 작업하는 모든 작업에 대해 발표자 테스트를 제공 할 수 있습니까? 내 첫 번째 관심사는 테스트 코드가 훨씬 더 부풀어 오를 것이지만, 내가 볼 때까지 또는 테스트 해보기 전까지는 확신 할 수 없다는 것입니다. – MatteS

관련 문제