web-dev-qa-db-ja.com

MVVMファイルをソリューションで整理する方法

私はMVVMの概念にかなり慣れていますが、これまでのところ、多くの柔軟性が得られるようにしています。ただし、コードを管理するための適切な方法を見つけるのに苦労しています。私のソリューションでは、xxxView.csxxxViewModel.csyyyView.csyyyViewModel.cszzzView.cszzzViewModel.csなど、いくつかのクラスがフォルダー内にあるだけです。ソリューションが混雑し始めており、探しているファイルを見つけるのが難しくなっています。これらのファイルを整理する標準的な方法はありますか? ViewおよびViewModelフォルダーを作成して、ソリューションを分離してクリーンアップしますか、それとも他の方法を見つけてもらえますか?

7
lumberjack4

別のプロジェクトを使用します

  • 見る
  • ViewModel
  • 型番

そして、それらのプロジェクト内で、追加の構造を提供するためにフォルダーを追加する可能性があります。

ViewプロジェクトはViewModelを参照し、ViewModelプロジェクトはモデルを参照します。

多くの場合、画像は独自のフォルダを受け取ります。これまでのところ、リソースディクショナリ、コンバーター、および拡張オブジェクトは、レイヤーのメインプロジェクトフォルダーに配置されています。


別の方法として、「主要なアプリケーション領域」をプロジェクトとして持つこともできます。次に、各エリア内にV/VM/Mフォルダーがあるか、関連するMVVMファイルをエリアプロジェクトフォルダーに配置します。

私は頻繁に一度に複数のビューで作業する必要があるので、このアプローチはあまり好きではありません。

この方法では、リソースディクショナリなどの再利用を制限しています。プロジェクトの相互参照は、維持が困難になる可能性があります。ただし、専用の「共通リソース」プロジェクトを作成することは、この問題を緩和するためのアプローチになります。

3
user53019

私のソリューションは8つのプロジェクトに分かれています。

  • コンバーター
  • ヘルパー
  • Models.Business
  • Models.DataContext
  • Models.Entities
  • 起動
  • ViewModels
  • ビュー

App.xaml(およびApp.xaml.cs)を格納するためにのみ、スタートアッププロジェクトを作成する必要がありました。そうでなければ、循環参照の問題がありました。

私はこのフォーマットで作業しており、実用的で機能的です。

次のステップでは、各レイヤーのテストプロジェクトを作成します。

enter image description here

3
Rodolfo Gaspar

あるプロジェクトでは、ネストが多く類似した名前の60の「画面」がありました。

ビュー、ViewModels、およびControllersフォルダーでの整理は、フォルダーのネスト構造全体が3つのメインフォルダーすべてにレプリケートされ、ビューモデルからそのビューに戻ったり、戻ったりするので、操作が非常に困難でした。

次のように、同じ画面または機能領域に属するファイルをまとめることで、作業しやすい組織になると私は考え続けています。

  • セクションA
    • セクションA 1
      • ISectionA1ViewModel.cs
      • SectionA1ViewModel.cs
      • SectionA1View.xaml
      • SectionA1View.xaml.cs
      • SectionA1Controller.cs
    • セクションA 2
      • ISectionA1ViewModel.cs
      • SectionA2ViewModel.cs
      • SectionA2View.xaml
      • SectionA2View.xaml.cs
      • SectionA2Controller.cs
  • セクションB
    • ISectionBViewModel.cs
    • SectionBViewModel.cs
    • SectionBView.xaml
    • SectionBView.xaml.cs
    • SectionBController.cs

主な理由は、そのプロジェクト(および私が作業した他のプロジェクト)では、これらのことは非常に静的なためです。小さな変更のみを実行します。また、大規模なリファクタリングの場合、1つのファイルから別のファイルに移動する方が簡単です。それらをソリューションエクスプローラーで一緒に表示できるため、非常に直感的です。

また、Visual Studioで[アイテムの追跡]オプションを有効にしている場合、常に上下に移動することに夢中になってしまうことはありません。

2
JoanComasFdz

個別のプロジェクトが必要ない場合は、少なくともプロジェクトフォルダーと名前空間で異なる部分を分離してください。

別のパターンを使用しています。関連するビュー、ビューモデル、モデルを、名前空間で区切られた同じアセンブリに保持します。新しい関係が作成されるたびに、新しいアセンブリが作成されます。

1
Matt Raffel