在ASP.NET MVC中,视图模型应该在哪里创建/操作?

3
在ASP.NET MVC中,应该在哪里使用视图模型?严格来说,这应该在控制器中完成吗?或者说,从存储库方法返回视图模型是否可行?
4个回答

6
在我看来,视图模型是特定于将要使用它们的应用程序的,而存储库会返回一个所有应用程序通用的模型。因此,我认为应该在网站内部创建视图模型,从存储库返回的通用模型中创建,而不是将存储库与视图布局相关联。

如果两个应用程序可以使用相同的ViewModel,那么您会为VM创建一个专用项目吗? - heltonbiker

3

严格来说,你的存储库应该返回领域对象。

存储库: "通过使用类似于集合的接口来访问领域对象,协调领域和数据映射层之间的中介。"

Fowler(PoEAA)


1

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);

    }
}

0

仓库应该是您的领域和 UI 之间的媒介 - 仓库不应该知道有关您的 UI 层的任何信息 - 这样,您可以尽可能地获得最佳的重用性和解耦效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接