Я пытаюсь очистить свои методы действий в проекте ASP.NET MVC, используя модели представлений. В настоящее время мои модели представления содержат сущности, которые могут иметь отношения с другими сущностями. Например, класс ContactViewModel может иметь контакт, который может иметь адрес, оба из которых являются отдельными объектами. Чтобы запросить список объектов 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 в свой новый плоский объект. Одна из моих проблем с этим подходом заключается в том, что мои методы действий могут быть немного заняты, и я не думаю, что AutoMapper может отображать два или более объекта в один тип.
Какие методы предпочтительны для преодоления моих опасений?