2011-07-03 4 views
3

MVVM을 처음 사용하려는 응용 프로그램을 만들고 있습니다. 어떤 것을 읽은 후에는 모델에 무엇이 들어 있는지 오해했을 수도 있습니다.MVVM의 모델 부분 만들기

지금 내 모든 앱은 데이터를 가져 와서 표시하고 사용자가 수정하고 변경 사항을 저장하도록 허용합니다.

다음은 현재 설정의 한 예입니다. 필자는 직원 그룹 ("관리자", "VP"등)을 반환하는 직원 데이터를 읽었습니다. 각 그룹에는 사람들 목록이 있습니다. 그룹을 나타 내기위한 인터페이스를 만들었습니다 :

public interface IEmployeeGroup : INotifyPropertyChanged 
{ 
    bool IsDirty { get; set; } 
    string GroupName { get; set; } 
    ObservableCollection<IPerson> People { get; set; } 
} 



public interface IPerson : INotifyPropertyChanged 
{ 
    bool IsDirty { get; set; } 
    string PersonName { get; set; } 
    int Id { get; set; } 
} 

그런 다음 이러한 인터페이스를 구현하는 구체적인 EmployeeGroup 및 Person 클래스를 만듭니다. 그리고 그들이하는 일 모두가 지정된 속성을 노출합니다.

내 모델에는이 모든 것이 있습니다. ,

public interface IEmployeeGroupsViewModel 
{ 
    ICommand AddEntryCommand { get; } 
    ICommand SaveCommand { get; } 

    ObservableCollection<IEmployeeGroup> EmployeeGroups { get; set; } 
    ObservableCollection<IPerson> People { get; set; } 
} 

뷰 모델은 실제 데이터를 얻기 위해 전화를 만드는 EmployeeGroup와 Person 객체를 만든 다음에 결합 할 수있는 뷰에 대한 속성을 반환

내보기 모델은 아래의 인터페이스를 구현 . 사용자가 변경 사항을 저장하려면 뷰 모델이 변경 사항을 지속하도록 호출합니다.

모델에 있어야하는 뷰 모델에 너무 많이 넣고 있습니까? 현재 모델은 아무 것도하지 않습니다. 객체를 나타내는 클래스 일뿐입니다.

여기를 벗어나면 누군가가 조언을 해줄 수 있습니까? 위의 시나리오를 어떻게 변경합니까?

감사합니다.

답변

4

아무런 문제가 없습니다. 은 서식을 지정해야하는 경우보기 모델에서 매핑 된 모델 속성을 노출하거나 변경할 필요가없는 경우보기 모델에서 직접 모델을 노출 할 수 있습니다.

MVVM은 패턴 순도가 아니라 테스트 가능성에 관한 것입니다. 당신이하고있는 것이 작동하는 한, 당신은 나중에 언제든지 리팩토링 할 수 있습니다.

0

나에게 맞는 것처럼 보입니다.

내가 틀릴 수도 있지만,보기 모델 인터페이스가 INotifyPropertyChanged에서 파생 된 것을 실제로 볼 수는 없습니다. 그것은 실제로 서로간에 본질적인 관계가없는 두 가지를 불필요하게 결합하는 것처럼 보입니다. 예를 들어 PersonViewModel 클래스를 다음과 같이 선언합니다.

public class PersonViewModel : IPerson, INotifyPropertyChanged