2016-12-28 11 views
1

WPVMアプリケーションのコンテキストで、ドメインモデルをMVVMパターンでモデルとして使用することはできますか?または、モデル(MVVM内)がPOCOであるはずですか?私は個人的にMVVM WPFパターンのモデルとしてドメインモデルを使用することに対して何らかの理由を見ません。MVVMのモデルはドメインモデルかPOCOですか?

しかし、XAML要素は何にバインドされますか?ドメインモデルにマップされているVMのプロパティ

答えて

2

あなたのタイトルに記載された質問に答えるには:どちらもありません。

MVVMでは、「モデル」は通常、ビューモデルの他の側(つまり、ビューモデルとリポジトリ間)のすべてです。モデルは、いくつかの異なる追加のアーキテクチャとパターンで構成できます(通常は、「モデル」内にサービス、マイクロサービス、DALとDIL、ドメインモデル、POCO /データエンティティなどがあります)。あなたが話す

ドメインオブジェクトとPOCOSはモデルではありません、彼らはモデルの一部です。あなたが話すモデルのパースペクティブは、データエンティティまたはドメインオブジェクトが実際にモデルであるMVCのような他のパターンから引き継がれています。このモデルは、MVVMよりも少し複雑です。

MVVMのPOCOに直接バインドすることはできますが、(リポジトリから取得したルックアップリストなどの)変更されない非常に単純なものでない限り、通常はお勧めできません。また、ドメインオブジェクトにバインドすることは、ストレージや検索に関連する追加機能や情報が含まれていますが、UIに表示されているものについては過度のものであるため、通常はかなり悪い考えです。ドメインオブジェクトのもう1つの問題は、通常はうまくいきません(しばしばドメインオブジェクトが生成される場合が多い)ので、非常にシンプルなモデルを持たない限り、実際にできるだけ早くドメインオブジェクトをPOCOに変換することが最善です。

answer from Owenに記載されているように、UIで使用できるようにするには、POCOをviewmodelクラスでラップする必要があります。プロパティーの変更通知が不要で、オブジェクトの他の機能を利用したくない場合(たとえば、表示された項目にコンテキストメニューが必要ない場合など)は、唯一の時間ではありません。

-1

はい限り、あなたのドメインモデルを使用すると、VMのプロパティ

+1

しかしそれが問題です。DMは決して 'inotifypropertychanged'を実装しません。だから、VM *が(ドメイン)モデルをラップしていると言うのはより正しいですよね? –

+0

エンティティフレームワークを使用する場合、DMで作成されたPocoはinotifyを実装します。 VMでも、DMの基本プロパティがinotifyを実装する必要があります – Krishna

1

しかし、その後XAML要素がどのように結合するとXAMLをバインドすることができINotifyPropertyChangedの実装として?ドメインモデルにマップされているVMのプロパティ

はい、あなたはあなたのWPFアプリケーションであなたのPOCOモデルのエンティティクラスを参照し、動的な変更通知のサポートを提供するためにINotifyPropertyChangedインターフェイスを実装するビューモデルクラスでそれらをラップすることができます。これは完璧です。

これに関する詳細については、以下の質問への私の答えを参照してください。

Correct way to update property in ViewModel from Model

2

あなたはおそらく、ビューモデルとドメインモデルオブジェクトをラップすることをお勧めします。ビューモデルの目的は、モデルからのデータをビューに役立つ方法で公開することです。非常に単純なアプリケーションでは、変更通知のためだけに余分なレイヤーを追加するのは面倒かもしれませんが、アプリケーションが複雑になるにつれて、バインドするビューモデルレイヤーを持つことでモデルをきれいに保つことができます。素早く汚れたことをしている場合、ドメインモデルオブジェクトに直接バインドすることはありません。

関連する問題