これは私の常にイライラしていたので、提案を求めようと思いました. モデル/ビュー/ビューモデルを WPF (ソリューション エクスプローラー) でどのように整理しますか? 満足のいく解決策を見つけることができないように見えるので、誰かがいるのだろうかと思っています。
6 に答える
モデルが独自のアセンブリ(プロジェクト)にある必要があるという事実は別として。「Views」と呼ばれるフォルダーと「ViewModels」と呼ばれる別のフォルダーを作成するのではなく、関連するビューと ViewModels を 1 つのフォルダーにまとめる傾向があります。
たとえば、次のように言います。
Project MyApp.Model
|---> Models
Project MyApp.Client
|--> Orders
| |--> OrderCRUDView
| |--> OrderCRUDViewModel
| |--> OrderListView
| |--> OrderListViewModel
|--> Accounts
|--> AccountCRUDView
|--> AccountCRUDViewModel
|--> AccountListView
|--> AccountListViewModel
...etc
モデル/ビュー/ビューモデルを WPF (ソリューション エクスプローラー) でどのように整理しますか?
私は通常、モデルを別のプロジェクトに持っています。MVVM の主な目標の 1 つは、モデルを View および ViewModel から完全に分離することです。
View と ViewModel は依存します - 私の個人的な組織スタイルは、プロジェクトの範囲によって異なります。
非常に小規模なプロジェクトでは、各「ビュー」の View と ViewModel を並べて配置することがよくあります。
大規模なプロジェクトでは、これらを独自の名前空間 (およびフォルダー) に分割するか、別のプロジェクトに分割することさえあります。ViewModel を View とは別のプロジェクトに置くと、ViewModel が View 要素を参照しないように強制できるという点で便利です。必要な参照をそのプロジェクトから完全に除外できるからです。
それらをさまざまなプロジェクトに分け、そこから分解しました。基本的には M プロジェクト、VM プロジェクト、View がメイン プロジェクトです。しかし、最終的に V と VM はより緊密に結合されました。
これは、ほぼ 10 年間、自明ではないプロジェクトの基本的なセットアップを開始するためのものであり、そのシンプルさは私によく役立っています。ビューとビューモデルを同じプロジェクトに保持するという恐ろしい慣行は、プリズムのように思えますが、MVVM コミュニティは 10 年前にそのアンチパターンを打ち破りました。
クライアント層:
ProjectName.Client.csproj
--Assets
--Images
--Brushes
--DataTemplates
--Styles
--Controls
--Helpers
--Views
ProjectName.Client.ViewModel.csproj
--ModelViews
--ViewModels
--Helpers
サーバー層:
ProjectName.Server.Services.csproj
ProjectName.Data.csproj
ProjectName.Model.csproj
ビュー モデル レイヤーは、サーバー層に存在する「モデル」プロジェクトを参照せず、データ サービス参照のプロキシを介してビュー モデルに公開されます。
私は「ソリューション フォルダー」派です...
特定の V と VM を同じアセンブリにまとめて保持し、すべての V/VM アセンブリを Visual Studio によって作成された「ソリューション フォルダー」に配置します。
モデルとユーティリティ クラスはアセンブリによって分離され、「ソリューション フォルダー」にもプッシュされます。
そしてもちろん、魔法の文字列などを含む「インフラストラクチャ」と呼ばれるソリューション フォルダーがあります...
ソリューション フォルダは論理的な指定です。ドライブに物理フォルダーを作成しません。