사람 .. 저와 WPF 제자에서 몇 사람이 적극적으로 MVVM의 요소 모두가 합의한하는 논의 이유MVVM 표준화
. 저는 패턴을 여러 가지 방법으로 구현했으며 프로젝트의 필요에 따라 여러 패턴을 혼합하거나 자체 패턴을 만들거나 개발자의 삶을 편하게 만듭니다. 그러나 이러한 어려움이나 프로젝트의 특별한 필요성을 잊지 마십시오. . 모두가 동의 한 MVVM 패턴의 표준 규칙에 대해 논의 해 보겠습니다. 나는 some of my thoughts here도 올렸다.
왜 MVVM입니까?
- Testabiltiy (뷰 모델보다 단위 테스트에 쉽게 코드 숨김 또는 이벤트 기반 코드)
- 이보기
- 모델의 "혼련을"결코 증가하지 UX 디자이너와 개발자 사이의
- 지우기 seperation에 보기에 대한 변경을 지원하기 위해 변경해야 함
- 보기 변경을 지원하기 위해 ViewModel을 변경할 필요가 거의 없음
- 보기를 복제 할 중복 코드가 없음
않고 안보기
- 테스트 할 어떤 논리를 포함 할 수 없습니다 : 글렌은 MVVM, 우리는 코드에서 코드를 작성할 수있는 코드 계산 운동이 아니라고 말했듯을 -뒤에. 하지만 테스트 할 로직을 작성해서는 안됩니다. 예 : 사용자가 국가를 선택한 경우보기에 주 또는 도시 목록을 표시하려고합니다. 이것은 비즈니스 요구 사항이므로이 논리를 테스트하기위한 단위 테스트가 있어야합니다. 따라서 코드 숨김으로 작성해서는 안됩니다.
- 은 컨트롤 또는 데이터 템플릿이 될 수 있습니다.
- 가능한 한 간단하게보기를 유지하십시오. : XAML에서 Data Trigger 또는 Value Converter 또는 Visual State 또는 Blend Behivor를 조심스럽게 사용할 수 있습니다. 뭔가 바인딩이 아닌 경우
- 사용 연결된 속성 :
않고하지 마십시오 뷰 모델에
- 커넥터 당신이 할 수있는 (보기 및 모델
- 뷰 상태, 값 변환을 유지 사이 ValueConverter를 사용하는 대신 ViewModel에 표시 할 데이터 구조를 생성하십시오 예 : 이름과 성 대신 이름을 표시해야합니다 모델에는 이름과 성이 있지만 이름 속성은에서 만들 수 있습니다. ViewModel.)
- 은 (가능한 한 검증 VM을 확인보기의 없음) 강하거나 인터페이스를 통해 (약 참조하지 예를 들어 싱글 클래스에는 호출 없음)
- VM (에 물건을 관련 통제하지 그런 다음 뷰를 변경하는 경우 때문에 VM을 변경해야합니다.)
모델
- 데이터 모델이 될 수 DTO, POCO, 당신은 도메인 서비스 및 프리젠 테이션 레이어 사이의 분리를하는 방법에 따라 도메인 클래스 및 UI 모델의 자동 생성 된 프록시
- 뷰 모델
에 대한 참조 당신은 어떤 제안이 있거나 그것에 대해 언급 하는가?
우리 그룹에는 하나의 의견 차이가 있습니다. ViewModel에서 View의 인터페이스를 사용하는 것은 괜찮습니다. 그러나 View Model이 View의 인터페이스를 가지고 있다면 MVP 패턴이 될 것이라고 말합니다. 우리 MVVM 전문가의
하나는 MVVM 대 MVP
보기에 대해 말할 => 뷰 모델
- MVVM 뷰가 직접에서
- 데이터 바인딩을 통해 뷰 모델과 VM에 회담에 바인딩 MVP에서 뷰는 SupervisingController에 걸려 있거나 전혀 바인딩되지 않은 모델 (수동 뷰)에 바인딩됩니다.
뷰 모델 =>보기
MVVM
- INPC/속성 바인딩
- 이벤트 중개자를 통해
- 메시지 (이벤트 그리 게이터/메신저/RX 프레임 워크)
- 인터페이스를 통해
- 대리인을 통해 (뷰 패스는 다시 호출하는 데 사용할 수있는 VM에 위임합니다. 예를 들어, VM은 뷰 호출이 전달하는 SetActions 메소드를 공개 할 수 있습니다.
표준 발표자 협상 되돌려 인터페이스 바인딩을 통해, 또는 수동보기의 경우 속성 통해서 뷰되는 MVP 케이스
MVP
. 패시브 뷰에서는 속성이 데이터 바인딩을 사용하지 않고 대신 뷰 속성 getters 및 setter를 사용하여 컨트롤 값을 직접 설정합니다.그 생각에 대해 어떻게 생각하십니까?
ViewModel의보기 인터페이스가 괜찮습니까?
당신은 추가에 오신 것을 환영합니다 다음 추가를 추가 할 경우
...이 게시물에 대한 :)전체 아이디어는 커뮤니티에서 MVVM 패턴의 동일한 이해를 얻을 수 있습니다.
당신이 쓴 내용을 좋아하고 당신이 여기에 게시 기쁘다. – chakrit
확실합니다.이 질문을 커뮤니티 위키로 이동하는 방법? 죄송합니다 .. 누군가가 나를 옮길 수있게 도와 줄 수 있습니까? 또는 이동 방법을 알려주십시오. 감사. –
저는 이것이 cwiki로 살기에는 너무 많은 논쟁이라고 생각합니다. 그러나 다른 생각을 보게 될 것입니다. – bmargulies