34

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

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

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

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

私は新しいことを学ぶのがひどいです-WPFとASP.NetMVCを勉強するのに何年もかかります。後で関連性がないことを知るためだけに、たくさんの新しい資料を研究したくありません。そして、私には私に指示する建築家がいません。

だから私の質問は:これらのフレームワークとテクノロジーを視野に入れて、私が研究と使用に焦点を当てるべきものを提案できますか(特に、後でWindows 8で使用できるもの)?

4

4 に答える 4

47

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

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

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

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

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

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

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

于 2012-05-29T18:36:50.567 に答える
15

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

ここで少し説明します。

MVVMは、アプリケーションのロジックを表します。ビュー、ビューモデル、モデルを実際に巧妙に分離する方法。それを行うのに最適な(?)フレームワークがわからない-必要に応じて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();
         }
    }

プロジェクト「Implementor」、参照のみ「Shared」プロジェクト

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

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

さて、PRISMに戻りましょう-これはすべて(!)です。すぐに理解するのは簡単なフレームワークではなく、単純な「Hello World」プログラムには適していませんが、一度習得すると、元に戻すことはできません。すべてのパーツを接着するだけで、必要なmoqフレームワーク(Rhinoなど)を自由に使用できます。

PrismはMicrosoftで開発されているので(私は願っています)、Windows 8だけでなく、Windows9および将来のすべてのバージョンでもサポートされる予定です。

MVVM、インジェクト、デカップリング/プラグイン、読みやすくテストしやすい、すべてが内部にあることを尋ねたものは何でも

于 2012-05-31T09:18:10.237 に答える
13

上記の詳細情報に追加する手間を省くために、私はあなたの生活を楽にするように努めます。

1)今のところ、IOC/依存性注入/プラグインアーキテクチャについては忘れてください。シンプルなアプリを作成しているとおっしゃっていますので、今は忘れてください。コードを整理しておくと、必要に応じて後で実装できます(これは良いことです)。

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

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

シンプルに保ち、すべてのテクノロジーにとらわれないようにしてください。

于 2012-07-02T08:23:13.730 に答える
0

この回答は、別の回答で引用されたRockfordLhotkaのブログ記事「MVVMパターンの使用にはフレームワークが必要」の要約部分を再現しています。

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

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

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

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

..。

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

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

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

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

..。

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

..。

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

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

于 2018-08-20T16:09:08.380 に答える