MVVMまたはMVC?WPFとASP.NETに同じクラスのセットを使用したい


10

私はデザインパターンの初心者です。新しい話題のMVVMを聞いているとき、MVCの学習を始めました。

古い在庫を再設計して、クライアント用に開発したアプリケーションに請求書を発行することで、これら両方の洞察を学びたいと思います。WindowsベースのWPFアプリケーションとWebベースのバージョンの両方を書きたいのですが。できれば同じクラスのセットを使用したいと思いますが、そうでない場合は、少なくとも少しの変更を加えてください。

私はいくつかの記事を読みましたが、そこで議論されている.NET 3.5&4のアーキテクチャと高レベルの概念に従っていません。実際のプロジェクトで本当に必要なものだけを設計することで、段階的に移行したいと考えています。

MVVMへの簡単な段階的な参照はありますか?MVVMはMVCのスーパーセットですか、サブセットですか?最新のパターンと、アプリケーションのWindowsバージョンとWebバージョンのどちらを選択する必要がありますか?

ビューに接続する必要がほとんどない特定のクラスがあります。その場合、MVVMの方法で同じクラスを設計することは、追加の労力であることがわかります。

回答:


10

MVVMへの簡単な段階的な参照はありますか?

はいあります。こちらをご覧ください。

MVVMはMVCのスーパーセットですか、サブセットですか?

MVVMはMVCファミリーに属しているので、少し言えばサブセットです。これは、UIをその下のビジネスロジックから切り離すバリアントです。私はそれをMVCの兄弟として説明します。OOPの初期の頃から、UIをロジックから切り離す方法を模索してきました。MVCは進化した最初の原型でした。ほとんどの人は正しく理解していませんが、それは非常に単純です。ビューはモデルの単なるオブザーバーであり、必要なときにそれを呼び出します。コントローラは、ビューがモデルと通信するための戦略にすぎません。たとえば、交換可能な動作(ReadonlyController、AdminControllerなど)が必要な場合などです。MVCは非常に成功しており、実際に適用することをお勧めします。

MVVMは、Martin Fowlerによって説明されているように、特殊な種類のMVPパターンです。MVPは(ユーザー入力などを取りながら)ビューを可能な限り簡潔に保ち、テスト機能を強化します。これは、ビューの抽象化とプレゼンターに挿入する対話ロジックを目的としています。プレゼンターはモデル/ビジネスロジックとのみ通信し、ビューを更新します。Martin Fowlerは、彼のプレゼンテーションモデルパターンでMVVMについてほとんど説明しています。

ビューは完全にViewModelに抽象化されています。にViewプロパティが必要な場合は、プロパティもViewModel必要です。これ(ViewModel)は、基礎となるUIテクノロジー、つまり抽象化から完全に独立していることを意図しています。ViewとViewModelの間で通信するには、同期パターンを使用する必要があります(つまり、オブザーバー)。これは、ステートレスなWeb環境で達成するのは容易ではありません。MVVMはMVPとは異なります。ビューはモデル/ビジネスロジックにバインドせず、代わりにViewModelにバインドするためです。

最新のパターンと、アプリケーションのWindowsバージョンとWebバージョンのどちらを選択する必要がありますか?

理論的には、プレゼンテーションモデル(MVVMのような)は、使用中のUIテクノロジから完全に独立している必要があります。ただし、同期化の側面をカバーする必要があります。これは、同期のりが既に存在するWPFでコマンドとプロパティにバインドすることで簡単に実行できます。ASP.NETでは、これは別の話です。ただし、すべてのWindows UIテクノロジでプレゼンテーションモデルパターンを使用したCodeProjectに関する記事があります。見てください。


4

ライフサイクルの問題と、ページの投稿間で状態を維持する必要があるため、WebとWPFの間で、UIコードを100%再利用するのは非常に困難です。Asp.netには、MVVMに必要な強力なデータバインディングがありません。また、ポストバックの必要なしにUIが自己を更新することを期待しているため、最近では多くのロジックをjscriptで実行する必要があります。

SilverLightを使用できれば、人生はそれほど複雑ではなくなります:-)

同様に、UIの一般的なビット用にWPFアプリでWebブラウザーをホストできますか?


SilverLightでどのようなメリットがありますか?
RPK

1
@ PRK、Silverlightは主にWPFのすべての操作を許可し、すべての「Web」ユーザーにインストールを許可できる場合は、WebにアクセスしてWebアプリのように「感じる」ソリューションを作成することもできます。
Ian

4

ASP.NetとWPFベースのUIに同じクラスを使用するという意図はあまり実用的ではありません。WebでのデータバインディングとJavaScriptの使用は、WPFとは大きく異なります。私が考えることができる唯一のオプションは、完全に受動的なビューを持つMVPです。理論的には、WebおよびWPFページにデータを入力するのと同じプレゼンターを持つことができます。
実際には、ほとんどのビジネスルールがWebサービスレイヤーと2つの異なるプレゼンテーション層にあり、このWebサービスと通信するビジネスルールをできるだけ少なくしたアーキテクチャを開発します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.