2011-01-12 4 views
2

MVVM 디자인 패턴을 사용하여 실버 라이트 응용 프로그램을 만들려고합니다. 그것은 일종의 은행 응용 프로그램입니다.MVVM 디자인 질문

MVVM에 대한 많은 자습서를 보았지만 뭔가 혼란 스럽습니다.

내 의견 "TransactionsView", "AccountView"등을 비롯하여 사용자 비밀번호, 사용자 이름 및 UserAccounts "UserAccounts"목록 (이름, 잔액 및 AccountTransactions의 목록 인 "AccountTransactions"- 이름과 ammount를 포함합니다.

내 userprofile을 포함하는 하나의 modelview를 작성해야합니까? 아니면 모든보기에 대해 viewmodel을 작성해야합니까? 지금까지 내가하고있는 일이야? 아니면 내가 completley 잘못 했니?

감사합니다.

+0

유용한 팁 : a)보기 모델은보기의 종입니다. 보기의 필요에 따라 그것을 창조하십시오; b) 모델은 매우 느슨하게 정의되며, 대부분 데이터를로드/저장하기 위해 뷰 모델에서 사용되는 것이거나 비즈니스 로직 클래스입니다. c) 뷰 모델은 비지니스 로직 (예를 들어, 검증 규칙)을 포함 할 수있다; d) 모델을 경량으로 유지하고 그것을 과도하게 생각하지 마십시오. 뷰와 뷰 모델이 중요한 부분입니다. e) 데이터 바인딩과 ICommand를 사용하여 뷰와 뷰 모델을 함께 묶습니다. 뷰에서 뷰 모델로 직접 호출하는 모든 것을 최소화하십시오. – Sander

답변

2

MVVM에서 ViewModels는 일반적으로 Views가 1 대 1입니다. ViewModel과 Models의 수 사이에는 패리티가 없습니다.

  • 보기 : UI
  • 뷰 모델은 : 적절한/경우 모델에 전달, 상태를 볼 수의 변경을 처리합니다. 기본 프로그램의 알림을 다시 사용자에게 보냅니다. 초기 UI 유효성 검사를 수행 할 수도 있습니다.
  • 모델 : 응용 프로그램의 실제 "내장". 알고리즘, 데이터 저장, 시스템 호출 등이 여기에 있습니다. 여기에 프로그램 흐름을 둡니다. 나는 다른 사람들이 그것을 ViewModel에 넣는 것을 보았다. 그 부분은 당신에게 달려 있습니다.

보기에는 항상 ViewModel이 필요하므로 1 대 1 (하위 모델이있을 수 있지만이를 결정할 때까지 남겨 두겠습니다 .1부터 시작하겠다. - 1).

ViewModel은 일반적으로 실제로 "작동"하기 위해 모델이 필요하지만 해결하려고하는 각 앱/문제에 따라 최대 몇 개의 클래스/인스턴스가 필요합니다.

+0

두 개의 다른보기에 대해 동일한 ViewModel을 사용할 수 있습니까? 그리고 내가 원하는 곳에서 액세스 할 수 있도록 내 다른 viewmodels의 공용 속성을 보유하는 전역 "MainViewModel"이 있어야합니까? – Richard

+1

@ 리차드 : 원하는대로 할 수 있습니다. 앱입니다. 그런데, ViewModel을 UI와 프로그램 사이의 대사로 생각하십시오. 프로그램이 프로그램의 관점에서 생각하게하고, UI가 UI 측면에서 생각하게하고, ViewModel이 번역하도록하십시오. UI 상태/UI 명령을 직접 처리하거나 UI 입력 유효성 검사를 수행하고 프로그램 상태를 UI로 다시 전달하는 것에서 너무 멀어지면 ViewModel 국가에서 Model town으로 향할 것입니다. 앱 디자인의 일부를 보지 않고서는 더 구체적인 조언을 드릴 수 없습니다. –

+0

@ 리차드 : MVVM은 퍼지기는하지만. 1 대 1 일 필요는 없습니다. 그것은 시작하기에 좋은 장소입니다. 필자는 개인적으로 ViewModel을 좀 더 "벙어리"로 선호하고 프로그램 흐름이 모델의 일부분에 의해 지시되도록합니다. 다른 사람들은 프로그램 흐름을 ViewModel의 손에 둡니다. 이는 사용자가 원하는 것처럼 들리는 것입니다. 프로그래밍이 쉽고, 이해하기 쉽고 (가능한 적은 주석을 달아서 가능한 한 주석을 적게), 디버그/테스트/보장하기 쉽고 버그가없고 유지 보수가 쉽다는 것을 알고 있다면, 올바른 길. –

0

당신이 옳은 방향으로 가고 있다고 설명합니다. 당신이 만드는 뷰 모델은 당신에게 달려 있습니다. MVVM은 돌이켜 보지 않았습니다 - 그저 방법 일뿐입니다. 나는 재판과 실수를 통해 발견 한 것이 너무 깊숙이 파기 전에 그것을 잘 이해하는 것이 현명하다는 것입니다.

내가 이해할 수있는 방식으로 MVVM을 설명하지 않은 많은 기사를 읽었습니다. 마침내 필자는 Jeremiah Morrill이 직접적으로 이해할 수있는 몇 가지 기사를 발견했다 : Article 1article 2.

+0

흥미로운 기사. 나는 그들이 MVVM을 좋은쪽으로 선물하는 것에 동의한다. – Sander

0

MVVM에는보기 당 하나의 ViewModel이 권장됩니다.

0

실제 규칙은 없지만 기본적으로보기 당 하나의 ViewModel이 있습니다. 여러보기에서보기 모델을 공유하려는 상황에 도달 할 수는 있지만 거의 볼 수 없습니다.

0

화면에 표시 할 내용과 화면의 컨트롤/상태를 상상해보십시오. 특정 화면 (보기)에 필요한 모든 것이 바인딩 할 수있는 ViewModel의 해당 속성을 가져야합니다 에서보기. 따라서 특정 뷰에 대한 단일 ViewModel로 변환됩니다. ViewModel 자체는 하나 이상의 모델에 묶일 수 있습니다. 적어도 그것은 그것을 이해하는 방법입니다.