对于HttpPost Edit操作方法,哪种重载最有效?

时间:2011-02-16 09:58:16

标签: asp.net-mvc asp.net-mvc-3

对于HttpPost Edit操作方法,哪种重载最有效?

  1. [HttpPost] public ActionResult Edit(int id, FormCollection collection)
  2. [HttpPost] public ActionResult Edit(OurDomainDataModel obj)

  3. 修改

    使用OurDomainDataModel

        [HttpPost]
        public ActionResult Create(Movie m)
        {
            if (ModelState.IsValid)
            {
                db.Movies.Add(m);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            else
                return View(m);
        }
    

    使用FormCollection

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            Movie movie = new Movie();
            if (TryUpdateModel(movie))
            {
                db.Movies.Add(movie);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            else
                return View(movie);
        }
    

    哪一个被推荐为最佳做法?

3 个答案:

答案 0 :(得分:4)

第一个没有创建和填充OurDomainDataModel实例的开销,但我不认为这会对性能产生很大影响。

请记住,过早优化是所有邪恶的根源。

答案 1 :(得分:3)

如果有效率意味着更快,那么我猜测(没有测试)使用FormCollection会更快,因为它没有使用模型绑定的开销。

然而此结果可以忽略不计,因此使用FormCollection将是过早优化。 MVC采用集成模型绑定设计,如果遇到性能问题,我敢打赌它在其他地方。

现在,如果你的开发时间意味着高效,那么这完全取决于项目和开发人员。

如果表单只发布了一些简单的值,那么使用FromCollection编码可能比创建模型更快。 然而如果是这种情况,那么使用参数会更快,你会输入值。 ActionResult Edit(int id, string name, bool someOtherValue)。虽然,如果您在任何项目中使用这些方法中的任何一种,但您很快就会发现需要创建模型。因此,最初快速编写代码将需要更多的开发时间来重构和维护。

如果您已经定义了OurDomainDataModel模型,那么传递代码的速度会快得多。

如果您真正想问的是

  

“什么是更优雅,可维护,可测试的代码,将获得其他任何必须使用它的人的尊重?”

然后答案是传递模型或ViewModel

答案 2 :(得分:1)

使用FormCollection 编写所有代码比使用ASP.NET MVC提供的内置功能更快,具体取决于您是多么优秀的程序员,以及映射层的效率如何。

然而,当表现并不重要时;只需使用

,您就可以节省很多宝贵的时间
ActionResult Edit(Model model);

语法。

我们的250万美元综合浏览量/月MVC网站使用MVC活页夹时效果很好。