Model-View-ViewModelはWPFで使用するのに最適なパターンですか?不利な点はありますか?MVVMパターンの問題点は何ですか?
答えて
これは、John Gossman自身からの直接のadvantages and disadvantages of MVVMの良い、短いブログ投稿です。
彼の主な欠点は以下の通りです。
は「シンプルなUIについては、MV-VMが過剰に大きい場合には、一般の右の量を得るためにフロントまでのViewModelを設計するのは難しいことができことのできるデータ。すべての驚異のためのバインディングは宣言的であり、ブレークポイントを設定するだけの素敵な必須のものよりもデバッグするのが難しい "
はい、こんにちはワールドスタイルの小さなアプリケーションのための過剰です。
実際には存在しません –
アプリケーションをビルドするには、MVVMを使い始めましたが、MVVMを使用しない場所を特定する次の理由から、MVVMをあきらめて大変なことをしました。
継承問題
我々は、.NETでプログラム、そして我々は、C#を使用し、最高の私たちは必ず継承したいです。 C#は複数のクラス継承をサポートしていないので、UIやロジックで部分的に再利用されるロジックを持つ抽象クラスを持つことはできません。
ほとんどの場合、私たちが混乱しているので、ロジックを継承して制御できるように、View Modelを設計する方法があります。
Viewを継承すると同時にViewModelを継承することはできず、ViewModelを継承すると同時にViewを継承することはできません。代わりに、非常に複雑なジェネリックスを使用しなければならず、PrismやUnityのようなツールの助けを借りて達成することができますが、それは時間のかかるものではありません。バインディングのViewModelに
のViewModelは
まあA = B + C、UI上のUIやレスポンスなどの単純なありえない時間のビジネスロジックのほとんどは巨大な役割を果たしています。しかし、UIのビジュアルプロパティをView Modelのデータプロパティにバインドすることはできますが、1つのビューモデルを別のビューモデルに実際にバインドする方法については疑問があり、2つの共有コントロールのバインディングを通過すると、最初。
ViewModelには、ViewModelには、分離コードファイルの簡単な交換があるとする分離コード
のシンプル代わるものではありません。しかし、私たちのアプリを作っている間、継承の制限は、WPF/SilverlightがUIスタイルをサポートしており、UIをロジックと完全に分離できることを教えてくれました.ViewModelでビジネスロジックを分離しています。我々は最終的に私たちは、すべてのビューとすべてのViewModelに、巨大な痛みとなっ変更のコードの同じパターンを書き込み、維持していることに気づいたのViewModel
でコードを繰り返し
はあまりにも苦痛です。 MVVMはテスト駆動開発に適していますが、拡張可能なコンポーネントを記述する場合は、最善の候補ではありません。
WPF/Silverlightは、すでにあなたがコードを分離し、UIは非常にうまく、我々は確かに今のビジネスロジックを実行し、私たちが必要とするすべてを与える非常に単純なクラス階層を設計していることができます。ここで、すべてのICommandベースのコマンドプロパティを、クラスの依存プロパティとして作成します。これは、UserControlとTemplated Controlでバインドします。
CodeBehindのICommandやResourceDictionaryのテンプレートとスタイルでは、MVVMを乗り越えることのできるメリットはほとんどありません。
元の質問をしてからしばらくしています。その時、私はMVVMをプロジェクトで多く使っています。したがって、継承では、ViewとViewModelを同時に継承するクラスが必要ですか?このクラスはViewかViewModelですか? ViewModelの繰り返しコードは、サービスやあらゆる種類のIOCを使用することで解決できます。 ViewModelバインディングと "ViewModelはCodeBehindだけではありません"私は同意します。 –
サービス&IOCは、中規模アプリケーションにとっては非常に複雑です。最悪の部分は、小さなチームでデバッグや管理が難しいことです。それには利点がありますが、若い血液のためにはそれはあまりにも複雑です。 –
異なるパターンは、強度が異なります。パターンを実装と混同する傾向があります。ビジネスロジックがどのように整理され、アクセスされるかは、与えられたアプリケーションにとって、どのパターンがより自然であるかに影響します。だから、この質問はWPFについて尋ねる間、任意のフレームワークで同じ画面を3回インパクトさせるために使用された3つのパターンについて読むのが役に立ちます。
以下は、MVVM(「プレゼンテーションモデル」)とMVP(「パッシブビュー」)およびハイブリッド実装MVVMP/MVC(「監督コントローラ」)を比較するJava記事へのリンクです。私はこれがパターンの比較を持つセクションを持っているので、これはこの質問に関連していると信じています。
Implementing event-driven GUI patterns using the ZK Java AJAX framework
それはジョンGossmanを作るだけでなく、二つの別のパターンでstrenghtsと短所の両方を比較する上で行くの弱点を指摘しています。
- 1. Reflectionの問題点は何ですか?
- 2. カウントダウンタイマープログラムの問題点は何ですか?
- 3. リダイレクトループの問題点は何ですか?
- 4. MVVMパターン、ViewModel DataContext質問
- 5. 旅行セールスマン問題に対するHopfieldニューラルネットワークの問題点は何ですか?
- 6. Mac OS Xでmmapシステムコールの問題点は何ですか?
- 7. MYSQLでHAVINGとGROUP BYの問題点は何ですか?
- 8. 私のUIWebViewの戻るボタンの問題点は何ですか?
- 9. このグラデーションディセントの実装の問題点は何ですか?
- 10. このコードの問題点は何ですか?
- 11. この正規表現の問題点は何ですか?
- 12. 以下のコードの問題点は何ですか?
- 13. このAPDU検証コマンドの問題点は何ですか?
- 14. このスクリプトの問題点は何ですか?
- 15. このforeachループの問題点は何ですか?
- 16. このPHPコードの問題点は何ですか?
- 17. iPadのgroupTableViewBackgroundColorの問題点は何ですか?
- 18. このヒープ実装の問題点は何ですか?
- 19. このC++シンプルリンクリスト実装の問題点は何ですか?
- 20. このコードの問題点は何ですか?
- 21. 「Programming Collective Intelligence」のピアソンアルゴリズムの問題点は何ですか?
- 22. Oracle:この結合の問題点は何ですか?
- 23. このコードの問題点は何ですか?
- 24. データベースのカスケード削除の問題点は何ですか?
- 25. このクエリの問題点は何ですか?
- 26. このpandas dataframe.apply(lambda)の問題点は何ですか?
- 27. このコードの問題点は何ですか?
- 28. このSELECTクエリの問題点は何ですか?
- 29. Javascriptの構文の問題点は何ですか?
- 30. このSQL文の問題点は何ですか?
建設的でした! – Vahid