Мне любопытно, как люди создают свои модели ViewModels и почему они выбирают этот метод.
Я могу придумать несколько способов:
-1. Injected repository - контроллер загружает модель и карты в ViewModel. Здесь конструктор ViewModel может принимать различные коллекции для интерполяции для ex. в списке выбора, например:
public CustomerController(ISomeRepository repository)
{
_repository = repository;
}
public ActionResult Create()
{
CustomerCreateViewModel model = new CustomerCreateViewModel(_repository.GetShipTypes,
_repository.GetStates);
..
..
}
-2. ViewModelBuilder - Либо вводится, либо инстанцируется в контроллере с экземпляром вложенного репозитория. Вызывается через что-то вроде
>var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
или,
var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
-3. Непосредственно в контроллере (не требуется код - его беспорядок)
-4. Некоторая другая услуга (введенная или нет), которая возвращает модель домена, которую контроллер затем сопоставляет, или ViewModel (кто делает это, чтобы вернуть модель представления, которая специально не названа/отмечена как класс Builder ViewModel?)
public JobCreateViewModel BuildJobCreateViewModel(int parentId)
{
JobCreateViewModel model = new JobCreateViewModel();
model.JobStatus = _unitOfWork.JobRepository.GetJobStatuses();
model.States=_unitOfWork.StateRepository.GetAll();
return model;
}
Теперь на обратном пути - относительно проверки ваших моделей просмотра - вы наследуете от базового класса ViewModel для стандартных проверок или копируете ваши проверки (например, атрибуты аннотации данных) между всеми вашими ViewModels или просто полагаетесь на серверную сторону валидация, чтобы все это можно было проверить снова на ваш объект домена?
Любые другие? Что-нибудь лучше? Почему?
ИЗМЕНИТЬ Основываясь на ссылке ниже, я нашел хорошую статью от Джимми Богарда по архитектуре ViewModels. В то время как он не затрагивает непосредственно вопрос, это отличная ссылка для любого, кто приходит сюда для информации ViewModel. http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/