2

MVVM に基づくアプリケーションを構築しています。設計上の問題のほとんどは解決しましたが、概念的に重要な問題が残っています: ViewModel または Model には、Model モデルの状態を含める必要がありますか?

最初は、モデルには独自の状態を含める必要があると考えていましたが、状態を ViewModel (モデルの状態の 90% を持つ) に渡すときに、多くのボイラープレートが関係していることがわかりました。

次に、状態全体をモデルからビューモデルに移動しようとしましたが、ビューモデルがモデルの状態よりもビューの状態を持っていると概念的に認識しているため、これは私には合いません。

州を配置する場所として最も受け入れられているのは?

4

1 に答える 1

1

ビューの状態を持つ ViewModel を正しく認識しています。概念的には、モデルの状態はモデルの一部ですが、特定のシナリオによって異なる場合があります。モデルをデータと考えてください。シリアル化できるもの、サーバーから取得できるもの、および/またはデータベースに保持できる/保持する必要があるものとして考えてください。

たとえば、ショッピング カートがある場合、配送カートのアイテムは明らかにモデルの一部です。ただし、チェックアウト プロセスの状態 (支払い方法が受領された、支払い方法が確認された、ユーザーが確認された) は、どちらの方法でも構いません。

ボイラープレートに関しては、妥当な量のボイラープレートでうまく機能するパラダイムは、ViewModel 内のモデル全体を含み (実際には、c# で参照)、モデル内のすべてのプロパティのゲッターとセッターを適切な偶数で公開することです。通知。例えば

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'); }
    }
}
于 2013-04-19T07:31:55.683 に答える