2011-12-07 19 views
4

私は現在、このようなかなり標準的なデカップリング構造を有するプロジェクトに取り組んでいます:MVVMとMVCの間でモデルを共有していますか?

リポジトリ - >サービス - >表示モデル - >ビュー

リポジトリとサービス層はPOCOオブジェクトを使用します。ビューモデルは、これらのオブジェクトと呼び出し元のサービスメソッドから構築され、ビューに渡されます。

私はMVC3を使用する1つのWebアプリケーションとWPFを使用する1つのデスクトップアプリケーションの2つのフロントエンドプロジェクトを持っています。 ビューモデルは、スタンドアロンのクラスライブラリに含まれています。これは、両方のアプリケーションで同じであるためです。 (例外はいくつかありますが、各プロジェクトで特定のVMを使用して処理されています)

現在、私は地上作業を行い、MVC側はすべて作業しています。私は現在、WPF側を見て、MVVMライトツールキットを使用することを考えています。

私の質問は:MVCとWPFのアプリケーション間でビューモデルを共有すると、MVVMライトツールキット(または他のツールキット)は適切ですか? MVVM3と一緒に使用しないでください。

私はしばらくの間、グーグルグーグルで、何も具体的なものが見つかりませんでした。あなたの考えを事前に感謝します。

答えて

5

私はMVVMとMVCの間でViewModelsを正常に共有することはできません。それらは同じものと呼ばれていますが、特定の実装に合わせて非常に調整されています。たとえば、コマンドを実装し、双方向バインディングなどに依存する必要があります.VPF用のVMを記述するときは、MVCに関係するものはありません。 MVVM Lightは、WPF/SLでMVVMを達成するのに役立ちますが、MVCにはまったく関係ありません。

私のWebプロジェクトがMVCではなく標準のWebフォームであることを除いて、私はあなたと同様のシナリオになります。 .Webと.Desktopプロジェクト間で.Business、.Modelプロジェクト参照を共有していますが、明らかに、それぞれのビジネスの結果(サービスを使用する場合はサービス)の結果が自分のものです。私はWPFにとって非常にフレッシュです。評価が間違っていれば、誰かが私を正してくれることを願っています。

+0

ありがとうございました。もう少しMVVMツールキットを見て、私はあなたが正しいだろうと言わなければならないでしょう。それはWPFまたはSilverlightベースのアプリケーションで実際にターゲット設定されているようです。私はそれが本当にMVC3で意味をなさないと思う。 – Steve

+1

これは、MVC3とWPFの両方のアプリケーションの間で同じviewmodelを共有するだけで実現できないため、正しいとマークしました。しかし、私がやったのは、ビュー・モデルとそのすべてのプロパティと検証を持つクラス・ライブラリを持つことです。 MVC3で使用されるビューモデルです。次に、これらのそれぞれを拡張してすべてのコマンドなどを追加します。これらはWPFで使用されるビューモデルです。これにより、2つの場所で同じプロパティ、検証などを定義するのではなく、すべての利点を伴うコードDRYが保持されます。 – Steve

+0

あなたはあなたのアプローチについて詳しく説明できますか?私は同様の状況に直面しています。そこで、私のデータレイヤー(POCOクラス)をMVC Webサイト全体に再利用し、Win8とWindowsPhoneのMVVMを通して公開したいと思っています。下層のPOCOにinotifyされたものを追加していますか?必要になったMVVMステージでチェーンの後半に注入しますか? – SelAromDotNet

関連する問題