针对控制器发布的模型的命名约定?
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 命名为什么,您都将对视图模型和绑定模型使用相同的名称。
我们使用术语 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 命名为什么,您都将对视图模型和绑定模型使用相同的名称。