针对控制器发布的模型的命名约定?



我们使用术语ViewModel来表示从控制器返回并传递给视图的类。我们没有使用 ViewBag 或 ViewData,而是使用了一个强类型类,它基本上存储视图所需的每个值。

public IActionResult OrderStep1()
{
var model = new ViewModelStep1()
{
SomeProperty = "SomeValue",
...
}
return View(model);
}

我正在寻找一种命名约定,该约定指定我们应该如何命名一个类,该类包含从表单的提交按钮发布到控制器的属性。在下面的示例中,我选择了OrderStep2作为该类的临时名称。

对于我们的多步骤顺序向导,我们使用发布/重定向/获取模式。因此,我可以丰富OrderStep2的信息并返回特定的视图模型OrderStep2VM

[HttpPost]
[ValidateAntiForgeryToken]
[Route("order/step2")]
public async Task<IActionResult> OrderStep2(OrderStep2 model)
{
// save some changes into the database and retrieve a GUID configurationId
return RedirectToAction(nameof(OrderStep2()), new { configurationId = "GUID" });
}
[Route("order/step2/{configurationId}")]
public IActionResult OrderStep2(Guid configurationId)
{
// retrieve configuration from database based on the configurationID
// do something else
var model = new OrderStep2VM()
{
....
};
return View(model);
}

由于我希望代码组织良好,因此我想将诸如OrderStep2之类的类分组到一个单独的命名空间中。目前,我正在考虑将它们称为PostModels,即OrderStep2PM,但我不想为可能已经存在的东西定义一个新术语。

(如果您想知道为什么我不使用 TempData:应用程序的工作流程需要保存不完整的表单数据,这允许我跳过 TempData,因为我无论如何都需要存储在数据库中(。

很简单,您发送到视图的模型应该与您从视图返回的模型相同。因此,如果您使用的是ViewModelStep1那么这也是您应该在后期操作中绑定的内容。

术语"视图模型"是从 MVVM(模型-视图-视图模型(中窃取的,因为它在 MVC 中的用途与 MVVM 中的视图模型类似。如果您不喜欢从帖子绑定到的模型称为"视图模型",那么您可以简单地使用更通用的东西,例如"DTO"(数据传输对象(,它既适用于模型绑定上下文,也适用于为视图提供数据。

无论何时何方,这里都没有硬性规定。将类命名为最有意义的名称。名字不是魔法。但是,无论为类命名什么,都将对视图模型和绑定模型使用相同的名称。

最新更新