web-dev-qa-db-ja.com

MVVM、Unity、Prism、MEF、Caliburn-何を使用すればよいですか?

助けてください-私は迷子になっています!

私はいくつかのコントロールといくつかの画面を持つ小さなデスクトップアプリケーションを書いています。これは、後でいくつかの画面を持つ小さなWebサイトと統合する必要があります。アイデアは、ユーザーが動画を編集して画像を選択し、その結果を友達と共有することです。

デスクトップアプリはC#WPF、Webサイト-ASP.Net MVCを使用しています。

MVVMを使用すると、数画面を超えてアプリケーションを拡張する方が簡単だと私は読んだ。それで私はCaliburn.MicroとMVVM.Lightを検索して発見しました。いくつかのチュートリアルをダウンロードしましたが、資料を深く掘り下げる準備をしているときにちょうど here on S.O を見つけました。 Prism、MEF、Unity、ReactiveUIもあります-これは多すぎます!

新しいことを学ぶのはひどい-WPFとASP.Net MVCを学ぶのに年齢はかかります。多くの新しい資料を調べて、後でそれが関連性がないことを確認したくはありません。そして、私には建築家がいません。

だから私の質問は次のとおりです:これらのフレームワークとテクノロジを全体像として説明し、研究と使用に焦点を当てる必要があるものを提案できますか(特にWindows 8で何を使用できるか)?

31
Avi

MVVMアプリケーションを構築する場合(おそらくさまざまな利点のために行います)、 MVVMフレームワークが必要です

Caliburn.Micro をお勧めします。Caliburn.Microのドキュメントページの例に従って実装するのは簡単です。また、構成メカニズムに対して非常に説得力のある規約があり、 Actions システムを使用して、ビューからビューモデルの動詞(メソッド)を呼び出します。これは、私が見た他のどのメカニズムよりも強力です。

Prismは、実装を支援するMVVM設計の要素を含む非常にヘビー級のフレームワークであり、特に複合アプリケーション(ホスティングシェル内で分離されたコンポーネントで構築されたアプリケーション)の構築に合わせて調整されています。

MEFは、アプリケーションのプラグインまたは拡張機能を検出する必要があるこれらのタイプのアプリケーションに役立ち(アプリケーションがブートストラップされた後でも)、Caliburn.MicroなどのMVVMフレームワークと一緒に使用できます。 MEFは、制御の反転の実装にも使用できますが、他の制御コンテナーの反転にあるコア機能の一部を提供しないため、プラグイン機能の実装にのみ使用することを決定できます。

UnityはIoCコンテナーであり、一般的なアプリケーションインフラストラクチャの依存関係注入を実装するために使用されます。ただし、.NETスペースには多くのIoCコンテナーがあり、そのいくつかはパフォーマンスの向上、追加機能、またはよりフレンドリーなAPIのいずれかを提供します。

ReactiveUIを使ったことがないので、わかりません。

WinRTへの移行のためにコードの再利用を最大化することについて話している場合は、 MVVMが最適です

44
devdigital

PRISMにはすでにMEFおよびMVVMロジックが含まれています:)

ここで少し説明しましょう。

MVVMは、アプリケーションでlogicを表します。ビュー、ビューモデル、モデルを実際に分離する賢い方法。それを行うための最良の(?)フレームワークがわからない-必要に応じて Catel または MVVM Light を確認できますが、これは、 MVVMロジックを実装し、実装を簡単にします。実際に独自のMVVMフレームワークを作成して、「秘密の要素はない」ことを確認することができます。同じ繰り返しコードと同じクラスなどが含まれています。実際には必要ありませんMVVMを実装するためのMVVMフレームワーク。

MVVMを学習して作成すると、すぐに疑問にぶつかります-分離方法でNUnitをテストする方法(これは、Silverlightでの自明な問題ではありません)などの理由で、すべてのIOC/Injectフレームワークが動作します。たとえばMEF。 Injectフレームワークの全体像を理解するには、次の例を検討してください。

「最小区切り文字」で記述されたプロジェクト「共有」(たとえば、ポータブルライブラリ)

    public interface IAmSharedInterface
    {
        string SayHello();
    }

プロジェクト 'メイン'、参照のみ '共有'プロジェクト

    public class IAmMainClass
    {
        [ImportingConstructor]
        public IAmMainClass(IAmSharedInterface SharedInterface)
        {
             SharedInterface.SayHello();
         }
    }

プロジェクト「実装者」、「共有」プロジェクトのみ参照

   [Export(IAmSharedInterface)]
   public class IAmImplementor: IAmSharedInterface
   {
       public string SayHello()
       {
          return "Hello from implementator class to whoever using it";
       }
    }

ご覧のとおり、「メイン」プロジェクトと「実装者」プロジェクトの間に直接的な参照はありません。すべての「マジック」は、MEF/Unityのビルド/解決プロセスで発生します。したがって、「実装者」プロジェクトと「実装者」と「メイン」を使用せずに、メインでNUnitテストを簡単に実行できます。また、他のプロジェクトがテスト目的で特別に「IAmSharedInterface」を実装およびエクスポートできるシナリオもあります。

PRISMに戻りましょう。これがすべて(!)あります。 簡単には理解できないフレームワークであることがわかりますが、できない )単純な「Hello World」プログラムに適していますが、一度学習すると、戻る方法はありません。すべてのパーツを接着し、自由にmoqフレームワークを使用できるようにします(例 Rhino )。

プリズムはMicrosoftで開発されているので(私はそう思います)、Windows 8だけでなく、Windows 9および将来のすべてのバージョンでサポートされるようになるでしょう。

MVVM、インジェクト、デカップリング/プラグイン、読みやすく、テストしやすいので、何でも聞いてみてください。

15
Jasper

上記の詳細情報への追加を保存するために、私はあなたのために人生を楽にするよう努めます。

1)とりあえず、IOC/Dependency Injection /プラグインアーキテクチャについては忘れてください。シンプルなアプリを作成していると言っているので、今は忘れてください。コードを整頓して実装してください。後で必要に応じて(それは良いことです)。

2)リストしたフレームワークのうち、Caliburn.Microをお勧めします。比較的単純で軽量です。立ち上がって実行するのに長い時間はかかりません。

3)WindowsアプリとMVC Webサイトの両方に使用できる別のアセンブリでモデルを作成します。

シンプルに保ち、すべてのテクノロジーに夢中にならないでください。

11
pfeds

この回答は、いくつかの要約されたチャンクを再現しています Rockford Lhotkaのブログ記事 "MVVMパターンを使用するにはフレームワークが必要です" 引用された- 別の答えで

これはこの質問に対するメタ回答のようなものです(ただし、特定の推奨事項は含まれています)が、そもそもMVVMにおけるフレームワークの役割を説明することは非常に役立つように思われました。

総称して「M」パターンと呼ぶ、かなり人気のある3つのプレゼンテーションレイヤーデザインパターンがあります。MVC、MVP、およびMVVMです。これは、それらすべてが「モデル」を表す「M」に加えて、いくつかの他の構成要素を持っているためです。

これらすべての「M」パターンの特徴は、一般的な開発者にとって、フレームワークなしではパターンは役に立たないということです。フレームワークなしでパターンを使用すると、ほとんどの場合、混乱、複雑化、高コスト、フラストレーション、そして最終的には絶望につながります。

これらは結局のところ単なるパターンであり、実装ではありません。そして、それらは成功するために正しく連携しなければならないかなりの数の概念を含む大きくて複雑なパターンです。

...

フレームワークなしでMVVMのようなことをしようとすると、膨大な量の作業が必要になります。大量のコードの複製、車輪の再発明、人々の考え方の再訓練。

少なくともフレームワークを使用すると、コードの重複を回避でき、うまくいけば車輪を再発明する必要がないため、人々の再訓練に集中することができます。通常、再トレーニングの部分は避けられませんが、フレームワークは配管のコードと構造を提供し、プロセスを簡単にします。

MVCパターンが数年前にASP.NETでのみ普及した理由を自問するかもしれません...

奇妙なことに、ASP.NET MVCが登場したとき、MVCはMicrosoftの世界で主流になり始めただけです。これは、ツールがVisual Studioに統合された包括的なフレームワークです。結果として。一般的な開発者は、モデル、ビュー、コントローラーを作成するだけです。その時点までは、MVCフレームワークが実行するすべての作業を行う必要がありました。これは大量のコードです。そして、たくさんのコードだけでなく、そのコードはビジネス価値とはまったく関係がなく、パターン自体の実装にのみ関係します。

...

典型的な開発者は、モデル、ビュー、ビューモデルの構築に集中したいと思っています。彼らは、弱参照ベースのイベントルーター、ナビゲーションモデル、ビューの抽象化、およびフレームワークが実行する必要があるその他すべてのことを構築する必要はありません。

...

それまでの間、 Caliburn Micro は、世の中で最高のMVVMフレームワークであるように見えます–確かに最も広く使用されている[2012年現在] ...

(保存上の理由から、テキストはインラインでコピーされました。)

0
UuDdLrLrSs