在ASP.NET MVC中,应该在哪里使用视图模型?严格来说,这应该在控制器中完成吗?或者说,从存储库方法返回视图模型是否可行?
严格来说,你的存储库应该返回领域对象。
存储库: "通过使用类似于集合的接口来访问领域对象,协调领域和数据映射层之间的中介。"
Fowler(PoEAA)
Viewmodels 应该在控制器中实例化并传递给强类型视图。通常,ViewModel 将包含多个模型类型,这些类型对于呈现视图是必要的。以下是一个快速示例:
假设您有两个模型对象 Orders 和 Customer
您想在页面顶部显示客户详细信息,并在该客户的 Index 视图中显示订单网格。
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);
}
}
仓库应该是您的领域和 UI 之间的媒介 - 仓库不应该知道有关您的 UI 层的任何信息 - 这样,您可以尽可能地获得最佳的重用性和解耦效果。