2015-09-23 11 views
8

Windows 8.1でWin 10と互換性のある作業プロジェクトがあります。このプロジェクトをUWPに変換する必要があります。以前のプロジェクトでは、MVVMのフレームワークとしてPRISMを使用しました。今問題は、UWPアプリケーションでは、Prismの新しいバージョンはまだリリースされておらず、MVVMLightを使用することを検討しています。プリズム対UWPアプリケーションのmvvmライト

私はこれらの両方のフレームワーク、つまりPRISMとMVVMLightには新しいです。私の質問は、コードベースをPRISMからMVVMLightに移動することがどれほど難しいかということです。それが困難な場合は、PRISMの新しいバージョンがリリースされるのを待つべきです。 MVVMLightに移行する必要がある場合、どのような大きな変更を行う必要があります。

私の所見によれば、コードベースはPRISMと強く結合しており、コード全体でIResourceLoader、ISessionStateServiceなどのインターフェイスを幅広く使用しています。また、私は、PRISMは学習曲線を持っているが、MVVMLightは学習曲線を持たないことを読んだ。 MVVMLightに移行する場合は、まずコードベースを理解してからコードベースを移植するMVVMLightを学ぶためにPRISMを学ばなければなりません。今週中にPRISMの新しいバージョンがリリースされるのを待つことにしたら、大きなコード変更がありますか?

両方のフレームワークに関してユニットテストがどのようにサポートされていますか?

このタスクには時間がかからないため、これは最も効率的な方法です。

+1

* "コードベースはPRISMと高度に結合されています" * - 私はこれがあなたの最大の問題だと思います。 –

+0

ですから、PRISMを使用してサインオフしていないので、MVVMLightに移行するためにどのような努力が必要かについて少しお話してください。そして私は両方のフレームワークに新しいと言っていました。 – Aakansha

+1

** MVVMを動作させるためのファンシーなフレームワークは必要ありません。たとえば** Dependency Injection **のように* *いくつかのことを少し簡単にするだけです。聖杯は**あなたのコードを**適応**に変更し、レイヤを分離し、実装を**インタフェース**として公開することです。ファンシーフレームワークを使用すると、依存関係を分離する方法が見つからない限り、そのフレームワークにつながる可能性が高くなります。これは非常に大規模な話題ですが、私は[adaptive code](http://www.amazon.co.uk/Adaptive-Code-via-Interface-Principles/dp/0735683204)を読むことをお勧めします。 –

答えて

10

TL; DR新しいNuGetパッケージを予期して、最新のプリズムコードをコンパイルします。

最初に、同じ足でみんなを得るためのプリズムの小さなイントロです。 Prismは、Microsoft Patterns & Practicesで作成されたMVVMガイダンス/フレームワークです。 WPF/Silverlightのバージョン5をリリースしました。次に、プリズムfor Windowsランタイム for Windows 8以降がWin8.1/WP8.1 RTにアップデートされました。これらは2つの異なるコードベースであり、2つ目のコードベースはリージョンの面でより軽量ですが、アプリケーションライフサイクル管理に非常に役立ちます。彼らが同じだと考えるのはよくある誤解です。

3月に、Prismの所有権がオープンソースプロジェクトとしてコミュニティに移され、GitHubで利用可能になりました。彼らは前進し、共通コードをPCLコアassembyにマージし、Xamarin Formsのサポートを追加することに決めました。

現在、は、UWP用のプリズム6のRTMリリースはありません。です。コードベースはonly a few minor issues openでリリースされていますが、ほとんどのユーザーが既にこのビットを使用するのを妨げるものはありません。この時点で、GitHubリポジトリをクローンし、アセンブリをコンパイルし、アプリケーションの移植を開始するように指示します。いくつかの大きな変更(主に名前空間)がありますが、すぐに起動して実行する必要があります。 RTMパッケージが利用可能になったら、ハードリファレンスを削除し、NuGetを使用します。

私はすでに小規模なアプリケーションの1つを移植しており、今週末には、より大きなLOB(60以上のスクリーン)を移植する予定です。


どのMVVMフレームワークを使用するか説明します。わずか数ページのアプリしかない場合は、フレームワークを使用してMVVMをシンプルにしないでください。複雑なLOBアプリケーションを使用する場合、これらのフレームワークには利点があります(もちろん欠点もあります)。多くの選択肢(MVVM Light、Prism、Caliburn Micro、...)があり、それらのすべてが良好です。

あなたの同僚がプリズムを選択したという事実は、Depechieのような理由があるかもしれません。まずは、Prismが優れたサポートを提供しているアプリケーションライフサイクル管理について考えています。

ベースクラスを正しく使用すると、後で別のフレームワークに切り替える場合に備えて、単一のViewModelからほとんどの依存関係をリファクタリングすることができます。

Prism for Windows Runtimeと切り替え時に対処しなければならないMVVM Lightの主な相違点は、VisualStateAwarePages、ViewModelLocator(各ビューの自動対プロパティ)、INotifyPropertyChanged用のBindableBase、およびアプリケーションに関するすべてですライフサイクル管理。どちらのフレームワークもうまくいきますが、あまりにも多くの作業(バグの可能性があります)のため、完全なLOBアプリケーションを切り替えることはお勧めしません。

+0

ありがとうBart。私は1つのQQを持って、プリズムである6.0は、新しい名前空間とUWPのベースライブラリのサポートとコードのちょうど移行があります?。それはまた、新しいプリズム6.0と適応トリガー、相対的なパネルなどのようなUWPのすべてのコントロールをサポートしていますか? – Aakansha

+1

コントロール(例:相対パネル)と適応型トリガーは、純粋にUIの問題です。これは、バインディング/コマンド/ビヘイビアを介してデータをモデルに戻す場合を除き、MVVMフレームワークでは通常処理しないことです。 – Bart

3

Windows 10 UWPアプリケーションは、言及しているフレームワークのどれにもあまり適していません。豊富なナビゲーション機能と適応レイアウトにより、Prismがどのようにうまく機能するかを確認することは難しいです。 MVVMLightに関して、それはあなた自身のビューモデルを動かすことよりもほんの少ししか提供しません。それを避けることによって、後であなたを噛んでしまう厄介なロックインの可能性をかわすことができます(よくあることです)

関連する問題