0

asp.net MVC 4 には、2 つの DomainModels があります。

  1. 製品
  2. 注文

および関連する ViewModel

  1. OrderDetailsViewModel

「OrderDetailsViewModelMapper」マッパー ファイルで、これら 2 つの DomainModels を ViewModel に手動でマッピングしています。マッパー ファイル「OrderDetailsViewModelMapper」はリポジトリ メソッドを呼び出します。このメソッドは DB にアクセスし、2 つの DomainModels ieProduct と Order をリポジトリ自体にマッピングした後に返します。したがって、マッパーはリポジトリを呼び出してそれを取得するだけです DomainModels. Automapper は必要ありません。このシナリオについて 2 つの質問があります。

  1. ViewModel を埋める上記のフローがベスト プラクティスに違反しているかどうか
  2. 以下のように「OrderDetailsViewModel」内に Product & Order タイプの 2 つのプロパティを保持し、「OrderDetailsViewModel」内のすべてのプロパティを複製して項目を個別にマップするのではなく、それらのプロパティのみをマップすることはできますか?
public class OrderDetailsViewModelMapper
{
public Product Product{ get; set; }
public Order Order{ get; set; }
}
4

1 に答える 1

0

私はあなたがいくつかのミスがあると思います。

  • まず、マッパー クラスは静的クラスであり、オブジェクトをある型から別の型にマップするための静的メソッドがいくつかあります。最良の方法は、リポジトリではなく UI で Mapper を使用することです。あなたのケースで私が見たところ、これはMapper ではなくDTOと呼ばれるべきです。

  • ビュー モデルの 2 番目の最適な方法は、ビューに表示するプリミティブ プロパティを保持することであり、ナビゲーション プロパティをモデルに保持することではありません。

リポジトリから ViewModel (リストまたは単一オブジェクト)にデータを取得する最善の方法は、射影を使用するIQueryable<Model>ことです。この場合、DTO を作成する必要はなく、適切な ViewModel に射影するだけです。

例えば

var list = repository.Query.Select(m=>new ViewModel{
                                      First = m.First.Something,
                                      Second = m.Second.SomethingElse});

アップデート:

コメントを読んだ後、DTO「データ転送オブジェクト」をリポジトリから返す必要があります。または、ViewModel を直接返すこともできます。それは、アプリケーションの複雑さと、誰を管理したいかによって異なります。

于 2013-05-05T21:39:17.730 に答える