每个视图或每个控制器操作一个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)
{
}
}
以下是三个选项,哪个最好?
答案 0 :(得分:10)
为GET和POST操作使用不同的视图模型是最好和最灵活的设计。但是对于GET和POST操作使用相同的视图模型也适用于90%的情况,这是一个很好的设计。因此,如果在您的场景中使用相同的视图模型,请不要犹豫,如此重用它。
如果将不同的视图模型用于GET和POST操作,那么这些类之间仍然存在某种关系:继承或组合。
答案 1 :(得分:3)
<强>既不即可。没有银弹,不应该。
因此,正确答案是:使用与用户界面流程要求一样多的视图模型。这与视图或控制器操作无关。
有时一个动作需要一个视图,另一个视图需要一个视图。但是,不要遵循一些会妨碍您发展的严格指导方针。在开发应用程序时,View模型会很自然。而且应该。否则,您最终可能会得出基于您已经设定的指南的无理观点。
这实际上与@ DarinDimitrov相似,但有直接的结论。
答案 2 :(得分:1)
使用不同的模型在Post动作中接收输入参数(在这种情况下我甚至不称它为ViewModel),而不是将输出参数传递给视图。
通过这种方式,您可以准确地自定义您接受的输入参数。
答案 3 :(得分:0)
我对基本形式采用这种方法:
GET模型继承了POST模型。
我经常会将一个域对象传递给GET模型的构造函数,并用它做两件事: