#c# #asp.net #asp.net-mvc #asp.net-mvc-3
#c# #asp.net #asp.net-mvc #asp.net-mvc-3
Вопрос:
В ASP.NET MVC, где следует работать с viewmodels?
Должно ли это выполняться строго в контроллере? Или было бы нормально сказать, вернуть view model из метода репозитория?
Ответ №1:
На мой взгляд, viewmodels специфичны для любого приложения, которое собирается их использовать, тогда как репозиторий вернет модель, общую для всех приложений. Итак, я бы сказал, что модель представления должна быть создана внутри веб-сайта на основе общей модели, возвращаемой из репозитория, вместо того, чтобы привязывать репозиторий к знанию о том, как выкладываются представления.
Комментарии:
1. Что, если два приложения могли бы использовать одну и ту же ViewModel? Не могли бы вы тогда создать выделенный проект для виртуальной машины?
Ответ №2:
Строго говоря, ваш репозиторий должен возвращать объекты домена
Репозиторий: «Является посредником между слоями отображения домена и данных, используя интерфейс, подобный коллекции, для доступа к объектам домена».
Фаулер (PoEAA)
Ответ №3:
Viewmodels должны быть созданы в вашем контроллере и переданы в строго типизированное представление. Обычно ViewModel будет содержать несколько типов моделей, необходимых для отображения вашего представления. Вот краткий пример:
Допустим, у вас есть два объекта модели Orders и Customer
Вы хотите отобразить сведения о клиенте в верхней части страницы и сетку заказов в индексном представлении для этого клиента.
public class CustomerModel
{
//properties
}
public class OrderModel
{
//properties
}
public class CustomerVM
{
public CustomerModel customer { get; set; }
public IEnumerable<OrderModel> orders { get; set; }
}
//and in your controller
public class CustomerController : Controller
{
public ActionResult Index(int id)
{
CustomerVM vm = new CustomerVM();
vm.customer = CustomerRepository.GetCustomer(id);
vm.orders = OrdersRepository.GetOrdersForCustomer(id);
return View(vm);
}
}
Ответ №4:
репозиторий должен быть промежуточным между вашим доменом и пользовательским интерфейсом — репозиторий не должен ничего знать о вашем уровне пользовательского интерфейса — чтобы вы могли получить наилучшее повторное использование и максимально отделиться от него.