2013-04-19 1 views
2

MVVM을 기반으로하는 응용 프로그램을 구축 중입니다. 대부분의 설계 문제를 해결했지만 개념적으로 중요한 문제가 남아 있습니다. 내 ViewModel 또는 모델에 Model 모델의 상태가 포함되어야합니까?MVVM : 모델의 상태가 모델 또는 뷰 모델에 속합니까?

처음에는 모델에 자체 상태가 포함되어야한다고 생각했지만 상태를 ViewModel (모델 상태의 90 %를 차지함)에 전달할 때 많은 상용구가 관련되어 있음이 밝혀졌습니다.

그렇다면 전체 상태를 모델에서 ViewModel로 옮기 겠지만 개념적으로 ViewModel이 모델의 상태보다 View의 상태를 갖는 것으로 인식하므로이 점이 나에게 잘 맞지 않습니다. .

주에 가장 적합한 장소는 무엇입니까?

답변

1

보기 상태의 ViewModel을 올바르게 인식하고 있습니다. 개념적으로 모델의 상태는 모델의 일부이지만 특정 시나리오에 따라 달라질 수 있습니다. 모델을 데이터라고 생각하십시오. 직렬화 할 수 있고 서버에서 가져올 수 있거나 데이터베이스에서 유지할 수있는/유지해야하는 것입니다.

예를 들어 장바구니가있는 경우 배송 카트의 항목이 분명히 모델의 일부입니다. 그러나 체크 아웃 과정 (지불 방법 수령, 지불 방법 확인, 사용자 확인)의 상태는 어느 쪽이든 갈 수 있습니다.

보일러 플레이트의 경우 합리적인 양의 보일러 플레이트로 잘 작동하는 패러다임은 ViewModel 내의 전체 모델을 포함하고 (실제로 #에서 참조) 모델의 모든 속성에 대한 getter 및 setter를 노출하지만, 적절한 균등 한 통보. 예 :

class PersonModel { 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
} 

class PersonViewModel : INotifyPropertyChanged { 
    private PersonModel model; 
    // next 4 lines can be factored out to a BaseViewModel class 
    private PropertyChangedEventHandler PropertyChanged; 
    private raise(string propName) { 
     this.PropertyChanged(new PropertyChangedEventArgs(propName)); 
    } 

    // ... repeat for each property in the model 
    public string firstName { 
     get { return model.fistName; } 
     set { model.firstName = value; raise('firstName'); } 
    } 
    public string lastName { 
     get { return model.lastName; } 
     set { model.lastName = value; raise('lastName'); } 
    } 
} 
관련 문제