ビュー モデルを使用して、ASP.NET MVC プロジェクトのアクション メソッドをクリーンアップしようとしています。現在、私のビュー モデルには、他のエンティティとの関係を持つ可能性のあるエンティティが含まれています。たとえば、ContactViewModel クラスには Contact があり、これには Address があり、どちらも別個のエンティティです。Contact オブジェクトのリストを照会するには、次のようにします。
IList<Contact> contacts;
using (IContactRepository repository = new ContactRepository())
{
contacts = repository.Fetch().ToList();
}
EditContactViewModel vm = new EditContactViewModel(contacts);
return View(vm);
この方法は、いくつかの問題を引き起こします。たとえば、リポジトリは using ステートメント内でクエリされます。ビューがレンダリングされるまでに、コンテキストは範囲外になり、ビューは Contact に関連付けられた Address を照会できなくなります。熱心な読み込みを有効にすることもできましたが、そうしないほうがよいでしょう。さらに、エンティティ モデルがビューに染み込んでいるのが気に入りません (ビューが Contact と Address の関係を認識しているのは悪い考えだと思いますが、私に異議を唱えることは自由です)。
Contact エンティティと Address エンティティの両方のプロパティを含むファット クラスを作成することを検討しました。次に、Contact エンティティと Address エンティティを新しいフラット化されたオブジェクトに射影できます。このアプローチに関する私の懸念の 1 つは、アクション メソッドが少し忙しくなる可能性があり、AutoMapper が 2 つ以上のオブジェクトを 1 つの型にマップできないと思うことです。
私の懸念を克服するためにどのようなテクニックが好まれていますか?