代码之家  ›  专栏  ›  技术社区  ›  citronas

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

  •  0
  • citronas  · 技术社区  · 7 年前

    我们用这个词 视图模型

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

    我正在寻找一个命名约定,它指定我们应该如何命名一个类,该类包含从表单的submit按钮发布到控制器的属性。在下面的例子中,我选择了 OrderStep2

    对于我们的多步骤顺序向导,我们使用 Post/Redirect/Get 并返回特定的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);
    }
    

    因为我希望代码组织得很好,所以我想对类进行分组,例如 订单步骤2 进入一个单独的命名空间。目前,我正在考虑给他们打电话 ,即。, OrderStep2PM ,但我不想为可能已经存在的事物定义一个新术语。

    0 回复  |  直到 7 年前
        1
  •  3
  •   Chris Pratt    7 年前

    很简单,发送到视图的模型应该与从视图中返回的模型相同。因此,如果你使用 ViewModelStep1 那你也应该在后期动作中绑定到它。

    术语“视图模型”是从MVVM(model-view-model)偷来的,因为它在MVC中的作用与MVVM中的视图模型类似。如果您不喜欢您从post绑定到的模型被称为“视图模型”,那么您可以简单地使用一些更通用的东西,比如“DTO”(数据传输对象),它在模型绑定和为视图提供数据的上下文中都起作用。

    推荐文章