web-dev-qa-db-ja.com

ドメインモデルのViewModelへのマッピング

次のような構造のAsp.net MVC5アプリケーションがあります。

  1. ドメインプロジェクト

インフラ

  1. DALプロジェクト
  2. ユーティリティ

UI

  1. UIプロジェクト(現時点ではViewModelが含まれていますが、時間の経過とともにアプリケーションが成長すると予想されるため、おそらくそれを別のプロジェクトに入れます)

Unityで注入された作業ユニットと一般的なリポジトリを介して動作します。

私の質問は:

UIビューに厳密にViewModelを使用しようとしていますが、ドメインモデル<=> ViewModelをマップするロジックをどこに配置すればよいですか?

コントローラでそれを行うか、マッピングロジックをViewModel自体に入れて、ViewModel.FromDomainObject(DomainObject domainObject)またはViewModel.ToDomainObject(ViewModel viewModel)などのメソッドを作成する必要がありますか?

5
Iztoksson

マッピング実装をコントローラーの外に置きます。代わりに、callコントローラのマッピングを担当します。

public ActionResult FetchSomething()
{
    var thingMapper = new ThingMapper();
    var viewModel = thingMapper.ToViewModel(service.FetchSomething());
    return View(viewModel);
}

もちろん、ViewModelが1つまたは2つのプロパティの場合は、マッパーをスキップできます。

public ActionResult FetchSomething()
{
    var thing = service.FetchSomething();
    var viewModel = new ThingViewModel { Prop1 = thing.Prop1 };
    return View(viewModel);
}

少し運が良ければ、 AutoMapper は、カスタムマッパーを作成せずにオブジェクトをマップするのに役立つ場合があります。

マッピングの実装をViewModels自体に保存しません。これは、1つのViewModelが複数のソースからのデータを表すことができる場合に不便になります。また、私の趣味には責任が多すぎます。

6
Scant Roger