【问题标题】:Why did Microsoft choose MVC for ASP.NET?为什么微软为 ASP.NET 选择 MVC?
【发布时间】:2009-05-12 20:49:12
【问题描述】:

除了作为一个 30 年的模式之外,MVC 从未适用于当前的应用程序。 MVP 是它的继任者,旨在处理 90 年代出现的基于事件的应用程序。 Passive View 和 Supervising Controller 似乎已经升到了顶峰。对于这两者来说,几乎没有必要谈论 MVC/MVP。

具体来说,ASP.NET MVC 中的控制器操作是否会带回创建该视图的视图?在 MVC 中,控制器不会创建视图或与它们对话。将 ASP.NET MVC 称为 MVC 实现有多准确?或者,它的准确名称是什么?

【问题讨论】:

  • 我想知道为什么制作了 MVC,然后把它当作世界上最新的东西。当我从简单的代码隐藏到 j2ee 时,我发现很多人从事 MVC 已有十多年了。当我坚持一个供应商太久时,我会感到被欺骗。
  • 控制器不带回视图。控制器带回视图数据,视图引擎“通常”负责渲染视图,因此名称是准确的。我相信castleproject.org 是 MS 创建 ASP.NET MVC 的一大灵感。

标签: asp.net-mvc model-view-controller design-patterns mvp passive-view


【解决方案1】:

我认为是 Ruby on Rails 启发了 MS 创建 asp.net MVC。

【讨论】:

  • 嗯,这当然可以让他们在那个领域竞争,尽管我认为这是因为网络表单被设计破坏了:P
【解决方案2】:

ASP.NET MVC 只是 Microsoft 对在 Ruby on Rails 和 Django 等 Web 框架中成功实现 MVC 的认可。意识到许多 Web 开发人员希望采用更加亲力亲为的 Web 开发方法,这种方法包含“自以为是”的编程模型(约定优于配置)并偏离 ASP.NET WebForms 提供的有状态抽象。

它是 Smalltalk MVC 模式的精确实现吗?不,这是恐慌的结果吗?不,这是 Ruby on Rails 和 Django 成功的结果吗?是的。

我碰巧喜欢这个模型,因为它包含 .NET 和 ASP.NET 堆栈提供的丰富框架,同时在基于约定的开发方法和使用上保持简约。

【讨论】:

    【解决方案3】:

    足够接近,这是一种销售策略。

    他们将 ASP.NET 与其他自称为 MVC 的技术进行对比。因此,将其命名为在同一类别中被认为具有竞争优势。

    比起准确的技术识别,微软更常靠产品定位取胜。 (加上长期交付,恕我直言。)

    【讨论】:

      【解决方案4】:

      ScottGu 在他关于第一个 MVC 演示 here 的帖子的第一部分中没有找到答案。简短的回答是人们要求它,微软决定接受它。它符合当前的 .Net 模型,可添加尽可能多的选项,使框架能够覆盖更大的目标市场,并为开发人员提供适合项目的正确工具。

      【讨论】:

        【解决方案5】:

        由 ASP.NET MVC 实现的 MVC 不是旧的 MVC 模式。在我称之为“经典”的 MVC 中,视图可以直接但只读地访问模型,在 ASP.NET MVC 中,直接从视图访问业务模型被认为是一种不好的形式。你最终得到的是非常类似于监督控制器+被动的东西 查看:

        public class MvcExampleController : Controller
        {
            public ActionResult ActionMethod(BoundInputData inputData)
            {
                var results   = DoActualWorkInTheModelWith(inputData);
                var viewModel = CreateViewModelFromThe(results);
        
                return View(viewModel);
            }
        }
        

        对我来说,这看起来更像是一个监督控制器,而不是经典的 MVC。一旦在模型中完成工作,视图就会传递给 ViewModel(又名 PresentationModel)。 ViewModel 通常与视图中的 UI 元素具有 1 对 1 的关系,并且可能看起来或可能不像实际模型中的对象。作用于 ViewModel 而不是实际 Model 的 View 对我来说很像 Passive View。

        我不会讨论这是否是“真正的”MVC 实现,但如果你的论点是 ASP.NET MVC 不使用现代 Web 设计模式,我不得不不同意。

        【讨论】:

          【解决方案6】:

          最好的猜测,每个人都听说过 MVC。 MVC 作为“最佳实践”已经被击败了很长一段时间,因此整整一代(或两、三代)开发人员看到 MVC 并产生了愉快的想法。

          此外,许多其他框架都以类似的方式支持 MVC,因此 Microsoft 可能觉得有必要这样做。

          简而言之,我非常怀疑这是否有很强的技术原因。

          【讨论】:

            【解决方案7】:

            您可以使用当前的 ASP.NET 框架推出自己的 MVC,并且仍然保留回发模型。

            http://www.codeproject.com/KB/aspnet/RollingYourOwnMVCwithASP.aspx

            【讨论】:

            • 我认为他们实施 MVC 的原因之一是摆脱回发模型。
            • 回发模型有它的缺点 - 例如 HTML 膨胀和默认创建的所有视图状态。 MVC 设计模式的最大优点是没有更多的代码隐藏文件,因此它有助于使用 MBUnit 等工具进行自动化单元测试。我写的文章是一个例子,它既保留了回发模型,又实现了一个允许完整的自动化单元测试的设计。
            【解决方案8】:

            这是一个很好的问题,很多人在 MVC 早期都问过这个问题。这是该项目的主要开发人员之一 Phil Haack 的答案!

            http://haacked.com/archive/0001/01/01/everything-you-wanted-to-know-about-mvc-and-mvp-but.aspx

            检查一下,阅读链接并从那里开始。

            此外,可能是 S#arp 架构的辩论答案。他们在 MVC 之上构建了一个层,使其更像 MVP。如果您正在寻找符合这些方面的东西,请查看它们。

            祝你好运!

            【讨论】:

            • 谢谢,但他的结论是非常错误的——“这个框架(即 ASP.NET MVC)采用 MVC 模式而不是 MVP 模式,因为它不尝试模拟富客户端开发,因此MVC 模式更合适。”现代 Web 应用程序,就像现代客户端应用程序一样,使用 MVP。这发生在 Web 应用程序中,因为 Web 浏览器处理用户输入。您将很难找到使用 MVC 的应用程序,这意味着控制器直接处理用户输入。
            【解决方案9】:

            我认为这更像是一个“恐慌营销决策”,而不是技术决策。 RoR 每秒都在抢夺市场,MSFT 完全惊慌失措,所以 MSFT 觉得他们必须提供一些东西,让他们有机会再次将一些炒作带回“他们的阵营”......

            他们还需要帮助他们的开发人员重新获得自尊,将这个大肆宣传的词与他们自己联系起来,这样 .Net 开发人员就可以再次照照镜子,而不会因为他们不了解 MVC 而感到羞耻因为他们选择的平台并没有为他们提供这种模式(开箱即用)

            对于中等技能 (.Net) 开发人员来说,当中等技能的 RoR 开发人员启动 rake 并在不到 15 分钟的时间内通过工作和运行的概念证明在 . Net developer 甚至已经完成了启动 vstudio.exe... ;)

            我想这是一个有争议的观点,但这是我的,我会捍卫它直到痛苦的结局......;)

            今天有无数这样的例子,是的,MVC 和脚手架会给你一个初始速度提升,是的。但是对于可维护性、代码重用、封装以及几乎所有真正重要的事情 - MVC 并不是“灵丹妙药”,而且大多数时候 WebForms 从长远来看要优越得多(除非像厕所一样使用当然是纸)

            【讨论】:

            • 不同意恐慌营销声明。这是 Phil Haack 和 Scott Guthrie 的内部驱动项目。营销团队根本没有把握住这一点。这完全是由开发人员驱动的。
            • 我也不同意上述说法。我已经在仅像视图状态这样的概念导致无穷无尽的问题的环境中实现了 Web 表单。我看不到 Web 表单在哪里更容易维护。 MVC 无论如何都不是灵丹妙药,但在某些情况下绝对是一个不错的选择。
            • 你真的认为 RoR 让 MS “恐慌”了吗?你需要多出去走走。
            • 对于上面的三个cmets,你能解释一下ASP.NET是如何成为一个MVC的吗?我正在与最初的 SmallTalk-80 实现进行比较,因为其他一切都只是突变。
            • 我怀疑微软是否会在恐慌的情况下提供像 ASP.NET MVC 这样大规模的东西来响应像 RoR 这样的东西。 MVC 是人们所要求的,它是一种成功的 Web 开发方法。它只是 Microsoft 通过成功的开发平台响应客户需求。
            猜你喜欢
            • 1970-01-01
            • 2011-04-03
            • 2016-07-07
            • 2014-11-30
            • 1970-01-01
            • 1970-01-01
            • 2010-10-29
            • 2012-01-08
            • 1970-01-01
            相关资源
            最近更新 更多