web-dev-qa-db-ja.com

UWPアプリケーション用のプリズムとmvvmライト

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

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

私の観察によると、コードベースはPRISMと高度に結合されており、コード全体でIResourceLoader、ISessionStateServiceなどのインターフェイスが広範囲に使用されています。また、PRISMには学習曲線がありますが、MVVMLightにはありません。したがって、MVVMLightに移行することにした場合、最初にPRISMを学習してコードベースを理解し、次にMVVMLightを学習してコードベースを移植する必要があります。今週中に新しいバージョンのPRISMがリリースされるのを待つことにした場合、コードに大きな変更がありますか?

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

このタスクに割り当てられる時間はあまりないので、これを進めるのに最も効率的な方法はどれですか?

10
Aakansha

TL; DR:新しいNuGetパッケージを見越して最新のPrismコードをコンパイルします。

まず第一に、全員を同じ足に乗せるためのPrismの簡単な紹介です。 Prismは、Microsoft Patterns&Practicesによって作成されたMVVMガイダンス/フレームワークです。彼らはWPF/Silverlightのバージョン5までリリースしました。その隣に彼らはまたリリースしましたWindowsランタイムのプリズム Windows 8用で、後でWin8.1/WP8.1RTに更新されました。これらは2つの異なるコードベースであり、2番目のコードベースはリージョンなどの面でより軽量ですが、アプリケーションライフサイクル管理に非常に役立つサポートを提供します。それらが同じであると考えるのはよくある誤解です。

3月に、Prismの所有権はオープンソースプロジェクトとしてコミュニティに譲渡され、 GitHub で利用できます。彼らは前進し、PCLコアアセンブリで共通コードをマージし、Xamarinフォームのサポートを追加することを決定しました。

今日の時点で、no RTM UWP用のPrism6のリリースはまだありません。コードベースは のみいくつかの小さな問題が開いています ですが、ほとんどのユーザーがすでにビットを使用することを妨げる大きな問題はありません。この時点で、GitHubリポジトリのクローンを作成し、アセンブリをコンパイルして、アプリの移植を開始するように指示します。変更(主に名前名)がありますが、すぐに稼働するはずです。RTMパッケージが利用可能になったら、ハード参照を削除してNuGetを使用してください。

私はすでに小さなアプリの1つを移植しており、今週末に大きなLOBアプリ(60画面以上)の1つを移植する予定です。


どのMVVMフレームワークを使用するかについての議論に戻ります。数ページのアプリを使用している場合は、フレームワークを使用せずに、MVVMをシンプルに保ちます。複雑なLOBアプリを使用する場合、これらのフレームワークには長所(そしてもちろん短所)があります。選択肢はたくさんあり(MVVM Light、Prism、Caliburn Microなど)、どれも優れています。

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

基本クラスを正しく使用すると、結局別のフレームワークに切り替えたい場合に備えて、すべての単一のViewModelからほとんどの依存関係をリファクタリングできるはずです。

Prism for WindowsRuntimeとMVVMLightの主な違い(頭の中で)は、切り替え時に取り組む必要があるのは、VisualStateAwarePages、ViewModelLocator(各ビューの自動vsプロパティ)、INotifyPropertyChangedのBindableBase、およびアプリケーションライフサイクル管理に関するすべてです。どちらのフレームワークも優れていますが、作業が多すぎるため(バグの可能性があります)、本格的なLOBアプリケーションをフレームワーク間で切り替えることはお勧めしません。

11
Bart

Windows 10 UWPアプリは、あなたが言及したフレームワークのいずれにもはるかに適していません。それらの豊富なナビゲーション機能と適応型レイアウトは、Prismがどのようにうまく機能するかを理解するのが難しいことを意味します。 MVVMLightに関しては、独自のビューモデルをローリングすることはほとんどできません。これを回避することで、後で噛み付くような厄介なロックインの可能性を回避できます(これはよくあります)。

3
Dean Chalk