首页 文章

命名ASP.NET MVC中存在的3种不同类型的模型的惯例是什么? (控制器输入,控制器输出和持久性)

提问于
浏览
3

命名ASP.NET MVC中存在的3种不同类型的模型的惯例是什么? (控制器输入,控制器输出和持久性)

Visual Studio,虽然MVC 3脚手架,为每个模型类添加了“模型”后缀,但我不确定这是一个不区分模型类型的好方法 .

我想问的一个棘手的问题是如何命名这3种不同类型的模型 . 我不是进入视图的模型称为视图模型 . 持久性可以称为持久性模型 . 但是控制器输入模型怎么样?

3 回答

  • 2

    我有一个 User 域实体,它有一个 ChangePassword 方法,接受 ChangePasswordInput 类并返回 ChangePasswordResult 类 . ChangePasswordInput 也用作 ChangePassword 视图(窗体)的控制器输入和视图模型, ChangePasswordResult 用作 ChangePasswordSuccess 视图的视图模型 .

  • 3

    我更喜欢它在here中给出的方式 . 它区分了查询的控制器输入模型和调用服务层(存储库等)的控制器输入模型 . 我开始采用以下方法:

    • 对控制器输出型号使用 *ViewModel .

    • 对于Controller输入模型,请使用 *Query ,其中只是对查询中使用的参数进行封装 .

    • 对于调用服务层的控制器输入模型,请使用 *Command .

    几个例子:

    // Example of Controller query input model
    public ActionResult Search(SearchProductsQuery query)
    {
        ProductSearchViewModel searchView = query.ExecuteWith(productsRepository);
        return View(searchView);
    }
    
    // Exmaple of Controller command input model
    public ActionResult Create(CreateProductCommand command)
    {
        if (command.Validate(this.ModelState))
        {
            var newProduct = command.CreateProduct();
            productRepository.Add(newProduct);
        }
        return View();
    }
    
  • 0

    我通常使用 *ViewModel 作为控制器输出模型,使用 *Form 作为控制器输入模型 .

    对于持久性(域模型/实体),我不使用任何特殊的命名约定 .

相关问题