2009-05-19 27 views

答えて

21

これは、John Gossman自身からの直接のadvantages and disadvantages of MVVMの良い、短いブログ投稿です。

彼の主な欠点は以下の通りです。

「シンプルなUIについては、MV-VMが過剰に大きい場合には、一般の右の量を得るためにフロントまでのViewModelを設計するのは難しいことができことのできるデータ。すべての驚異のためのバインディングは宣言的であり、ブレークポイントを設定するだけの素敵な必須のものよりもデバッグするのが難しい "

3

はい、こんにちはワールドスタイルの小さなアプリケーションのための過剰です。

+34

実際には存在しません –

6

これはWPF用の少数のフラッシュされたUIアウトパターンの素晴らしいパターンです。私の言うことは、多くの人がそれを理解し、採用しているということです。したがって、ヘルプと情報を入手するのは比較的簡単です。

私の意見では、SRPがこのパターンでDRYを誇張しているため、アプリケーションのクラスとコンポーネントの数が増えてしまうという最大の欠点があります。それが言われている、私はそれがそれの価値があると思う。

8

アプリケーションをビルドするには、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を乗り越えることのできるメリットはほとんどありません。

+0

元の質問をしてからしばらくしています。その時、私はMVVMをプロジェクトで多く使っています。したがって、継承では、ViewとViewModelを同時に継承するクラスが必要ですか?このクラスはViewかViewModelですか? ViewModelの繰り返しコードは、サービスやあらゆる種類のIOCを使用することで解決できます。 ViewModelバインディングと "ViewModelはCodeBehindだけではありません"私は同意します。 –

+0

サービス&IOCは、中規模アプリケーションにとっては非常に複雑です。最悪の部分は、小さなチームでデバッグや管理が難しいことです。それには利点がありますが、若い血液のためにはそれはあまりにも複雑です。 –

1

異なるパターンは、強度が異なります。パターンを実装と混同する傾向があります。ビジネスロジックがどのように整理され、アクセスされるかは、与えられたアプリケーションにとって、どのパターンがより自然であるかに影響します。だから、この質問はWPFについて尋ねる間、任意のフレームワークで同じ画面を3回インパクトさせるために使用された3つのパターンについて読むのが役に立ちます。

以下は、MVVM(「プレゼンテーションモデル」)とMVP(「パッシブビュー」)およびハイブリッド実装MVVMP/MVC(「監督コントローラ」)を比較するJava記事へのリンクです。私はこれがパターンの比較を持つセクションを持っているので、これはこの質問に関連していると信じています。

Implementing event-driven GUI patterns using the ZK Java AJAX framework

それはジョンGossmanを作るだけでなく、二つの別のパターンでstrenghtsと短所の両方を比較する上で行くの弱点を指摘しています。

関連する問題