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

Naming convention for models that get posted against a controller?

我们使用术语 ViewModel 表示 class 从控制器获取 returned 并传递给视图的元素。我们不使用 ViewBag 或 ViewData,而是使用强类型 class,它基本上存储视图需要的每个值。

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

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

对于我们的多步骤订单向导,我们使用 Post/Redirect/Get 模式。因此,我可以从 OrderStep2 和 return 一个特定的 ViewModel 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);
}

因为我希望代码组织得很好,所以我想将 class 等 OrderStep2 分组到一个单独的命名空间中。目前,我正在考虑将它们称为 PostModels,即 OrderStep2PM,但我不想为可能已经存在的东西定义一个新术语。

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

非常简单,您发送到视图的模型应该与您从视图返回的模型相同。因此,如果您正在使用 ViewModelStep1,那么您也应该在 post 操作中绑定它。

术语 "view model" 是从 MVVM(模型-视图-视图模型)中窃取的,因为它在 MVC 中的作用与 MVVM 中的视图模型相似。如果你不喜欢你从 post 绑定到的模型被称为 "view model",那么你可以简单地使用更通用的东西,比如 "DTO"(数据传输对象),它既适用于模型绑定,也适用于为视图提供数据。

有长有短,这里没有硬性规定。将您的 classes 命名为最有意义的名称。这些名字并不神奇。但是,无论您将 class 命名为什么,您都将对视图模型和绑定模型使用相同的名称。