2011-07-03 13 views
3

私はMVVMを初めて使用しようとしているアプリケーションで作業しています。何かを読んだ後、私はモデルに何が入っているのか誤解しているかもしれないと思います。MVVMのモデル部分を作成する

私のアプリはすべて、データを取得して表示し、ユーザーに編集を許可し、変更があった場合に保存するよう要求しています。

私の現在の設定例です。私は従業員のグループ(「マネージャー」、「VP」など)を返すEmployeeデータを読んでいます。各グループには人のリストが含まれています。

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人オブジェクトを作成し、その後に結合するビューのプロパティでそれらを返します。 。ユーザーが変更を保存したい場合、ビューモデルは変更を永続化するために呼び出します。

私のビューモデルではあまりにも多くを置いていますが、モデルにする必要がありますか?今私のモデルは何もしません、彼らはオブジェクトを表すクラスです。

私はここでオフトラックしている場合、誰かが私にいくつかのアドバイスを与えることができますか?上記のシナリオをどのように変更するのですか?

ありがとうございます。

答えて

4

あなたのアプローチに間違いはありません。 は、書式設定が必要な場合はビューモデルからマップされたモデルプロパティを公開するか、変更を加える必要がない場合はモデルをビューモデルから直接公開することができます。

MVVMはパターンの純度ではなく、テスト容易性に関するものです。あなたがしていることが働く限り、いつでも後でリファクタリングすることができます。

0

そうですね。

私は間違っている可能性がありますが、あなたのビューモデルのインターフェイスをINotifyPropertyChangedから派生させることによるメリットはありません。それは本当にお互いに本質的な関係がない2つのものを不必要につなぎあうように思える。私はちょうどPersonViewModelクラス(例えば)を宣言しています:

public class PersonViewModel : IPerson, INotifyPropertyChanged 
関連する問題