私は自分のドメイン オブジェクトを、それらが表すオブジェクトにできる限り近づけて作業するのが好きです。これが意味することは、アカウントに設定がある場合、ドメインAccount
オブジェクトにはPreferences
プロパティが含まれている必要があり、ほとんどの場合、オブジェクトのコレクションによって表されるということPreference
です。少なくとも、これはユーザーがアプリケーションのデータ構造を簡単に理解するのに役立ちます。
ビュー モデルの構築に関しては、これが最も簡単な方法です... 必要なもののプロパティを追加するだけです。どのタイプのプロパティが必要になるかは、ドメイン オブジェクトをどのように構築したかによって異なります。
ビューに質問で言及した要件があり、ドメインオブジェクトをそれらが表すオブジェクトに密接にモデル化した場合、その音によって、オブジェクトが必要になるだけAccount
です。Preference
Profile
最後に、実行する必要がある唯一の「マッピング」はLinQ
、Entity Framework を使用したクエリで実行できます。この時点でテーブルを結合し、作業中のオブジェクトに必要なデータを取得します。3 つのテーブルのデータからオブジェクトをインスタンス化する例を次に示します ( を使用LinQ2SQL
)。
public AudioTracks GetAudioTracks(AudioTrackSearchOptions searchOptions)
{
AudioTracks audioTracks;
using (MidasDataContext dataContext = DataContext)
{
audioTracks = new AudioTracks(
from audioTrack in dataContext.DbAudioTracks
join masterTrack in dataContext.DbMasterTracks on audioTrack.MasterTrackId equals masterTrack.Id
join masterTrackArtist in dataContext.DbDataLists on masterTrack.ArtistId equals masterTrackArtist.Id
orderby string.Concat(masterTrack.Title, " (", audioTrack.Mix, ") - ", masterTrackArtist.Text)
where (searchOptions.IsInactiveAudioTrackIncluded || audioTrack.IsActive)
&& (searchOptions.IsDeletedAudioTrackIncluded || !audioTrack.IsDeleted)
select new AudioTrack(audioTrack.Id, masterTrack.Id, audioTrack.Isrc, masterTrack.Title, masterTrackArtist.Text, audioTrack.Mix, audioTrack.IsContentExplicit, audioTrack.IsActive, audioTrack.IsDeleted));
}
audioTracks.Sort(a => a.TitleWithMix);
return audioTracks ?? new AudioTracks();
}
更新 >>>
AudioTracks
私の例を拡張して逆方向に作業すると、GetAudioTracks
メソッドは というプロジェクトにありDataProviders
ます。ユーザーフィードバックと再試行オプションを追加するだけGetAudioTracks
のクラスのメソッドから呼び出されます。これは、アプリケーション内のさまざまなタイプのトラックに関連するクラスのメソッドのサブセクションを含むプロジェクト内のDataController
によって呼び出されます。TracksModel
Models
DataController
最後にAudioTracksViewModel
、ViewModels
プロジェクト内のは、ユーザーが をロードしたTracksModel.GetAudioTracks
ときに発生する初期化時にメソッドを呼び出します。AudioTracksView
の左側には、ユーザーの検索および/またはフィルター選択に一致するすべてのオブジェクトが含まれていAudioTracksView
ます。画面の右側には、選択した のフィールドがあります。これはどのように見えるかです (リンクが壊れているように見える場合は、ここで画像を表示できます):ListBox
AudioTrack
AudioTrack
Button
右側に編集がある透明度の高いフィールドは、コレクションに接続された読み取り専用フィールドです。編集Button
によりダイアログが開き、ユーザーが複数の項目を入力できるようになり、それらの項目がフィールドにまとめられます。アプリケーション内のすべてのオブジェクトは、多かれ少なかれ複雑な同様のビューを持っています。