MVVMのどのフレームワークを使用すればよいですか?[閉まっている]


233

MVVMモデルでアプリケーションを開発していますが、使用するフレームワークを選択する必要があるところまで到達しました。

可能なオプションには次のものがあります。

  • MVVMツールキット
  • MVVM Foundation
  • WPFアプリケーションフレームワーク(WAF)
  • ライトMVVM
  • カリバーン
  • シンチ
  • プリズム
  • ReactiveUI

あなたの経験では、どちらが良いですか?


14
+1-良い質問ですが、「良い」を明確にしてください。フレームワークが異なれば利点も異なりますが、最適なものは要件によって異なります。回答をお待ちしております:)
ラッセル

さて、WPFとSilverlightを使用して、最小限の学習曲線で使用できると非常に良いでしょう。
ランゲル

2
Caliburnもチェックしてみてください。codeplex.com/caliburn
ケントブーガート2009

申し訳ありませんがケント。どうすればカリバーンを忘れられますか?
ピートオアンロン2009

2
昔ながらの...しかし、コンポーネントのサポートが必要なため、Prism(以下の回答)を使用して最初のプロジェクトを実行しました。私が最後に生で作成したプロジェクト-フレームワークはまったくありません。必要なのはコマンドクラスだけであり、フレームワークなしでMVVMを実行できます。
dave、2014年

回答:


194

それは、実際に達成しようとしていること、および必要なインフラストラクチャの量、さらには、役立つサンプルを簡単に見つけられるかどうかに依存します。ここでは、少なくとも1つのMVVMフレームワークに積極的に関与しており、WPFの弟子グループを通じて他の人たちにも情報を提供してきたので、ここで関心を宣言します。それを言って、ここに行きます:

Microsofts MVVM Toolkit-これはまだアルファ段階です。それが最初にリリースされたとき、それがしなかったことのために、それは弟子たちから少々野蛮なことをしました。それを言って、MSはこのフレームワークを強化することを目指しているので、それは注目すべきものです-それはまだ準備ができていないだけです。

MVVM Foundation-ああ、Josh Smithのバージョンのフレームワーク。ジョシュはMVVMのパパの1人であり、パターンの大いなる擁護者および教師でした。その結果、他のフレームワークで見つかるものの多くには、Joshのフィンガープリントがいたるところにあります。このフレームワークは、MVVMの基本を提供することを目的としており、より難解な問題のいくつかに対処することを意図していません。もともとこれはWPFのみを対象としたものでしたが、Laurent Bugnionや私などの人々が機能/プロジェクトを追加したため、これもSilverlight互換のフレームワークになります。

WAF-経験がないのでコメントできません。

MVVM Light -Laurent Bugnionがそれを引き受け、バージョン2に更新されました。これは非常に優れたフレームワークですが、MVVMアプリケーションのすべての側面をカバーすることを意図していません。Laurentの背景を考えると、非常に強力なSilverlightとBlendabilityのサポートがあります。

更新 Laurentは、.NET 3.5と.NET 4.0のバージョンに機能の互換性があることを知らせました。ローランに行くワウ。

Cinch-Sacha Barberの優れたWPFのみのMVVMフレームワーク。これは、上記で説明したフレームワークよりも広い範囲をカバーしています。これは優れたフレームワークであり、Bill Kempfの優れたOnyxプロジェクトでカバーされている概念を利用しています。OnyxはMVVMフレームワークを補完することを目的としており、MVVM / WPFでは一般的に行うのが難しい機能を追加します。繰り返しになりますが、元々はWPFのみを意図していたOnyxは、SL互換性を含むように進化してきました。

Prism-繰り返しますが、使用したことはありませんが、多くの良い点を聞いています。

Ocean -CiderチームのプログラムマネージャーであるKarl Shifflettは、最近、フル機能のWPF MVVMフレームワークをリリースしました。繰り返しますが、これは優れたフレームワークであり、推奨することがたくさんあります。

肝心なのは、さまざまなフレームワークをダウンロードしてそれらを確認し、考え方や要件に最も直感的に適合するフレームワークを見つけ出すことです。同じコードベースからSilverlightをサポートする必要があると思われる場合は、WPFのみのフレームワークを割り引く必要があります。


4
MVVMには非常に専門的なニーズがあるため、私が書いたものを使用します。Joshが行った作業に大きく影響されており、近い将来にオープンソースとしてリリースする予定です(私は専有のビットを削除するのに忙しい)。それはゴールドライトと呼ばれています。
ピートオアンロン2009

それに加えて、データアクセスレイヤーフレームワークは何ですか?みんな.. LINQ、LLBLGen、EF、nHibernate?
ジラポン2009

プロジェクトと要件によって異なります。LINQ、NHibernate、Castle ActiveRecord、eXpress Persistent Objectsを使用することもあります。
ピートオアンロン2009

3
こんにちはピート、MVVM Light ToolkitはWPF 3.5とWPF 4でもSilverlight 3とSilverlight 4とまったく同じように機能することをコメントしたいと思います。機能をできるだけ同期するように注意しています。しかし、これは私にとって大きな懸念事項です。)乾杯、ローレント
LBugnion

1
MVVMツールキットがVisual Studio 2010で動作するように更新されていないことにがっかりしました。意思決定プロセスに追加したいと思うかもしれません。2010年にMVVMテンプレートを使用していることを知っているほとんどの人はMVVM Lightを使用しており、この理由だけでMVVM Lightに移行した人もいます。
ScottCher

54

私はこの記事が非常に有用であると感じましたhttp://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/なので、今後のユーザーのためにここに持ってきます

Cinchセクションを更新し、その機能にSilverlightサポートを追加します

長い話でごめんなさい

一般的な機能:

•ViewModelBaseクラス(INotifyPropertyChangedインターフェイスの実装用)

•UIコマンドをViewModelのハンドラーにリンクするクラスのようなRelayCommand

•単体テストはフレームワークに付属しています

シンチ

•作成者:Sacha Barber

•Silverlightサポート:いいえ(Cinchバージョン2はSilverlightをサポートしています)

•ドキュメント:CodeProjectで公開された優れた6つの記事

•ホスティング:CodePlex

•ライセンス:コードプロジェクトオープンライセンス

• 特徴:

  1. 付属行動

  2. IDataErrorInfoを使用した検証

  3. IEditableObjectのサポート

  4. 弱いイベントの作成とサブスクリプション

  5. 弱いイベントを使用したメディエーターメッセージング

  6. IOC / DIサポート(Unityを使用)

  7. サービス:イベントロガー、メッセージボックス、保存ダイアログを開く、ポップアップ

  8. スレッドヘルパー

  9. メニュー項目のサポート

  10. クローズ可能なビューモデル

  11. MVVMコードジェネレーター

MVVM Lightツールキット

•作者:Laurent Bugnion

•Silverlightサポート:はい

•ドキュメント:Laurentのブログで公開されている多くの記事とその他の開発者

•ホスティング:CodePlex

•ライセンス:MITライセンス

• 特徴:

  1. MSIインストーラー

  2. VSプロジェクトとアイテムテンプレート

  3. VSコードスニペット

  4. ビューモデル間通信のためのメッセンジャーシステム

  5. イベントをコマンドとして処理する

MVVMヘルパー

•作者:マークスミス

•Silverlightサポート:いいえ

•ドキュメント:Markのブログのいくつかの記事

•ホスティング:個人Webサイト

•ライセンス:定義されていません

• 特徴:

  1. 付属行動

  2. マークアップ拡張を使用したビューモデルの作成

  3. 属性ベースの検証

  4. ServiceProviderアプローチを使用したIOC / DI

  5. クローズ可能なビューモデル

  6. 待機カーソル(new WaitCursor(){//ここにコードを挿入})

MVVM Foundation

•著者:ジョシュ・スミス

•Silverlightサポート:いいえ

•ドキュメント:JoshまたはMarlon GrechのブログのMessenger実装に関する記事

•ホスティング:CodePlex

•ライセンス:MS-PL

• 特徴:

  1. ビューモデル間通信のためのメッセンジャーシステム

  2. PropertyChangedイベントモニター

カリバーン

•作者:ロブアイゼンバーグ

•Silverlightサポート:はい

•ドキュメント:利用可能な完全なオンラインドキュメント

•ホスティング:CodePlex http://www.codeplex.com/caliburn

•ライセンス:MITライセンス

• 特徴:

  1. コマンドはアクションの上に構築されているため、複数の入力パラメーター、フィルター、自動非同期実行など、同じ機能の多くを共有します

  2. さまざまなUIコンポーネントのアクティブ化、非アクティブ化、シャットダウンのセマンティクスの処理など、UIライフサイクルの問題を処理するプレゼンター

  3. Caliburnアプリケーションは完全にテスト可能です

  4. バックグラウンドタスクマネージャなどのさまざまなユーティリティ

  5. さまざまなUIパターンをサポート(MVVMのみではない)

  6. 依存性注入コンテナ

オニキス

•作者:ウィリアムeケンプ

•Silverlightサポート:いいえ

•ドキュメント:CodePlexで利用可能な基本的な紹介

•ホスティング:CodePlex

•ライセンス:指定なし

• 特徴:

  1. ServiceLocatorパターン

  2. カスタムマークアップ拡張機能を使用したViewModelの作成

  3. IDisplayMessageなどのUI関連サービス

カルシウム

•作者:Daniel Vaughan

•Silverlightサポート:いいえ

•ドキュメント:CodeProjectに関する2つの非常に詳細な記事(パート1およびパート2)

•ホスティング:CodePlex

•ライセンス:著作権を使用、コピー、変更、および/または配布し、保持してください!

• 特徴:

  1. 実行時にモジュールを有効または無効にするモジュールマネージャ

  2. 同じAPIを使用してクライアントまたはサーバーからユーザーと対話するためのメッセージングサービス

  3. アクティブなビューまたはビューモデルがインターフェイスを実装するときにのみアクティブになるコンテンツインターフェイスにWPF ICommandを関連付けるコマンドサービス

  4. ツールバーとメニューの領域アダプター

  5. すぐに使用できるクライアントサーバーロギング

  6. Webブラウザー、テキストエディター、出力ウィンドウなどのモジュールが含まれています

  7. ダーティファイル表示のあるタブ付きインターフェイス(モジュール間で再利用可能)

nRoute

•著者:リシ

•Silverlightサポート:はい

•ドキュメンテーション:著者のブログで利用可能な多くの記事(リンクについては、CodePlexプロジェクトのホームページを参照)

•ホスティング:CodePlex

•ライセンス:MS-PL

• 特徴:

  1. Blend3の動作をサポートし、モデルをトリガーする

  2. リソースロケーターフレームワーク

  3. サービスの表示:OpenFileDialog、ShowMessage…

  4. 属性を使用してViewとViewModelを一緒にマップします

Nito MVVM

•作成者:Shammah

•Silverlightサポート:いいえ

•ドキュメント:いいえ

•ホスティング:CodePlex

•ライセンス:指定なし

• 特徴:

  1. ICommandインターフェイスのさまざまなMVVMフレンドリーな実装

海洋

•作者:Karl Shifflet

•Silverlightサポート:いいえ

•ドキュメンテーション:Karlのブログで利用可能な記事

•ホスティング:個人Webサイト

•ライセンス:指定なし

• 特徴:

  1. VB.Netで記述

  2. 属性ベースの検証

  3. viewmodel基本クラス:relaycommand、closeableviewmodel…

  4. SQLサーバーデータアクセスレイヤー

基本的なMVVMフレームワーク

•作者:レスター・ロボ

•Silverlightサポート:いいえ

•ドキュメント:ライブラリで利用可能なサンプルアプリケーション

•ホスティング:CodePlex

•ライセンス:MS-PL

• 特徴:

  1. 委任コマンド\キーバインド

  2. VM間のメッセージング

  3. 動作が関連付けられたコマンドとしてのイベントの処理

  4. ダイアログなどをサービスとして処理する

  5. VSコードスニペット

GoodLight

•作者:Peter O'Hanlon•Silverlightサポート:はい

•ドキュメント:ライブラリで利用可能なサンプルアプリケーション

•ホスティング:CodePlex

•ライセンス:MS-PL

• 特徴:

  1. 「ワークスペース」管理(閉じることができるドキュメントのセット)

  2. 肌サポート

  3. VM間のメッセージング


素晴らしいポスト。Cinchバージョン2はSilverlightをサポートしていると私が付け加えたと思います。
Kildareflare

44

ピートの素晴らしい答えに欠けているフレームワークについて説明しようとします:

MVVMツールキット(Microsoft)は、Visual Studioプロジェクトテンプレートを備えた非常に軽量なライブラリであり、このパターンで初心者をサポートする必要があります。マイクロソフトがツールキットについて良いフィードバックを受け取った場合、彼らはこれを新しいVisual Studio(おそらく2010)プロジェクトテンプレートとして実装する可能性があります。

Prism(Microsoft p&p)は、MVVMパターンのサポート以上のものを提供するフレームワークです。このプロジェクトの主な目的は、モジュール式の WPFおよび/またはSilverlightアプリケーションの構築を支援することです。MVVMパターンを実装する必要がある場合、または.NET / WPFの初心者である場合、このプロジェクトはお勧めしません。参照:リンク

WPFアプリケーションフレームワーク(WAF)は、MVVMでWPFアプリを作成するのに役立つ軽量のフレームワークです。WPF専用なので、Silverlightはサポートされていません。Controllersの導入により、他のほとんどのMVVMフレームワークとは少し違う方法で進んでいます。アプリケーションワークフローを担当し、さまざまなViewModelの間を仲介します。


19

ええ。MvvmはIMOをサポートするためにフレームワーク全体を実際に必要としません。概念を理解していれば、INotifyを実装するクリーンなVMベースクラスから始めて、そこから先に進むのは非常に簡単です。


4
多くの開発者がmvvmライブラリを開発する理由があります。あなたが言うことが本当なら、なぜこれらの開発者は時間を無駄にするのでしょうか?これらのフレームワークユーザーがお気に入りのmvvmフレームワークを使い続けるのはなぜですか?確かに、「MvvmはIMOをサポートするためにフレームワーク全体を実際に必要としません」。しかし、MVVMフレームワークなしで行うのは現実的ではありません。
Syaiful Nizam Yahya 2013

3
-1 IMOは、ICommands用の独自のRelayCommandクラス、VM間通信用のMessengerクラス、および適切に機能するWPFアプリケーションに必要な最も基本的なツールだけを説明するための独自のIoCコンテナーを作成することが、主要なPITAです。あなたの答えは、最も単純なプログラムに対してのみ有効です。
Heliac 2014


10

自分で混ぜる!

私はPRISMのEventAggregatorを使用し、MVVMファウンデーションのViewModelBaseを使用しました。また、RelayCommand(いくつかの場所で呼び出されるDelegateCommand)を調整して、他のデータも受け入れるようにしました。

それ自体は1つのフレームワークだけをお勧めしません。


19
私は敬意を払って同意しません。このアプローチの問題は、新しい参加者を得たときに明らかになります。社内のドキュメントは一般に優先されないため、プロジェクトへの参加コストははるかに高くなります。
Florian Doyon、2011

1
ドキュメントに関する要点はわかりますが、社内ドキュメントを開発する必要はないかもしれません。ドキュメントを含む外部サイトへのリンクは、コード自体に埋め込むことができます
Vasudevan Kannan

8

私の賭けはCaliburnとMVVMlightにあります。これらのmvvmフレームワークの多くはSilverlightをサポートしていないようです。mvvmフレームワークへの機能の境界を設定するのが難しいため、IoCフレームワークよりも選択するMVVMフレームワークが増えると予測できます。私はあなたのプロジェクトにどちらがより適しているかを見つける最良の方法は、それらの機能をリスト/比較することだと思います。

Mix10もチェックしてください。私は話から多くを学びます:mvvmフレームワークの構築。


4
その話はとても役に立った。ここに直接リンクがあります:live.visitmix.com/MIX10/Sessions/EX15
anshul


4

Prismを使用しています。私にとって大きなことの1つは、必要に応じて私を助けてくれる他の人々がいて、良い例があるということです。基本を実行すると、アプリに必要な拡張機能がたくさんあります。他のフレームワークと同じフレームワークで作業する方がはるかに簡単です。


2

全体として、私は自分のアプリケーション全体で90%です。MVVMツールキットで使用したのは、Executeで起動するデリゲート関数を指定してコマンドをビルドするファクトリ関数です。数時間で他のフレームワークに切り替えることも、フレームワークなしに切り替えることもできると思います。


2

考慮すべきもう1つはMEFedMVVMです。私はいくつかのプロジェクトで使用しており、軽量で邪魔にならず、SilverlightとWPFをサポートしています。また、その製品を使用する人のために、Blendの設計時データをサポートすることもできます。


1

WPF / MVVMアプリケーションフレームワークに加えて拡張性(アドインを作成する機能)を探している場合は、SoapBox Coreの 免責事項に興味がある可能性があります。オープンソースであるため、使用しなくても、いくつかの優れたアイデアがあるかもしれません。拡張性とIoCの両方にMEFを使用します。


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