実世界のアプリケーションでのMVVMの使用に関するプレゼンテーションを行っています。 宗教戦争 MVVMをアプリケーションのパターンとして使用する場合の設計上の決定。 MVVMアプリケーションでは、新しいView/ViewModelペアをインスタンス化する主な方法が2つあります(私が知っています)。
あなたの経験では、各方法の長所と短所は何ですか?それらによって何が可能になり、それぞれにどのような問題が発生しますか?
WPFのデータテンプレート機能を考えると、ViewModel-FirstはWPFがintendedを使用する方法であると感じています。
そのステートメントを明確にします。データテンプレートを使用すると、ViewModelからビューをインスタンス化できなくなります。正しく行われると、ビューとViewModelは、互いに参照しない別々のプロジェクトに保持される可能性があります。さらに、ViewModelプロジェクトはPresentationFrameworkアセンブリを参照してはならず、考えられるユーザーがViewModelを利用できるようにする必要があります。
DRYルールが最善であると感じたからといって、最初にビューモデルを優先する傾向があります。大規模なアプリケーションの作成を開始すると、テストが容易になるため、最初のビットよりも重要です。アプリケーションを設定するときに対処する必要がある頭痛の種。
警告-私はSilverlightではなくWPFを使用しています。
VM Vをインスタンス化することで(これは私が行う方法です)、ビューは独立しており、VMから独立して使用できます(たとえば、デザイナーで)
個人的には、MVVMC(モデル、ビュー、ビューモデル、コントローラー)に向かっています。そこでは、ViewModelとビューをインスタンス化して「結合」する制御クラスがあります。 Cはまた、データの取得(およびキャッシュなど)およびVMとVs間の通信を処理します(たとえば、Vがインスタンス化されている場合、コマンドをVMいくつかのアクションを実行するには、VMはおそらくCに代わってアクションを実行するように要求します;その後、Cは他のVMが処理できる適切なイベントを発生させることができます
(コントローラを使用するかどうかにかかわらず)VMが別のVMと通信する必要がある場合、VがVM- VMをVで公開する必要がないためです(または、少なくとも2番目のVMが1番目と通信できるように、いくつかのインターフェイスを使用可能にする必要があります)。
私はビューモデルの最初のアプローチを使用することを好みます。多くの理由から:
私たちは最初にViewModelを使用しましたが、アウトソーシングで、ブレンドの使用が最も重要なことになったとき、上司はView-firstがViewmodel-firstより優れていると言いました-私は彼に同意しませんでした(ただし、1対多は最高の比率ではありません)投票数;-))、なぜならコードビハインドでビューのイベントといくつかの奇妙な関係があるからです。今、私は取り返しのつかないところにあり、変更のためにいくつかのカスタムコントロールで立ち往生しています。
私はビューファースト(ソート)アプローチを使用しています。テストデータを含むダミービューモデルを使用して、クライアントと共同でビューを定義します。満足したら、「ダミー」からインターフェースを抽出し、実際のViewModelを実装します。次の理由から、このアプローチが最も魅力的であることがわかりました。
私はWPFで働いていますが、SLでもそれほど変わらないと思います。また、私のアプローチの選択に起因する可能性のあるビューのテストに時間を費やすことはありません。