ASP.net MVC - 每个视图或每个动作一个ViewModel?

Dis*_*ile 14 .net c# asp.net-mvc

每个视图或每个控制器操作一个ViewModel是一个更好的主意吗?

例:

public ProjectController : Controller
{
    public ActionResult Edit(int id)
    {
        var project = ...;

        return View(new ProjectEditViewModel(project));
    }

    [HttpPost]
    public ActionResult Edit(ProjectEditViewModel model)
    {
    }

    **OR**

    [HttpPost]
    public ActionResult Edit(Project model)
    {
    }

    [HttpPost]
    public ActionResult Edit(ProjectEditPostViewModel model)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是三个选项,哪个最好?

  1. 对我的POST/GET操作使用相同的ViewModel.
  2. 使用ViewModel进行我的GET操作,使用我的域模型进行POST操作.
  3. 使用不同的ViewModel进行GET,使用不同的ViewModel进行POST.

Dar*_*rov 10

为GET和POST操作使用不同的视图模型是最好和最灵活的设计.但是对于GET和POST操作使用相同的视图模型也适用于90%的情况,这是一个很好的设计.因此,如果在您的场景中使用相同的视图模型,请不要犹豫,像这样重用它.

在将不同的视图模型用于GET和POST操作的情况下,这些类之间仍然存在某种关系:继承或组合.

  • @Dismissile,非常糟糕的主意.在任何情况下都不要使用任何域模型作为任何控制器操作的输入/输出.虽然这里讨论的两种方法与视图模型可能存在不同的观点,但域模型甚至不应该被考虑.您应该始终定义视图模型. (2认同)