【问题标题】:On which pattern are ASP.NET webforms and MVC based? PageController, FrontController?ASP.NET webforms 和 MVC 基于哪种模式?页面控制器,前端控制器?
【发布时间】:2010-10-07 06:46:43
【问题描述】:

我试图从理解所使用的设计模式的角度来理解 ASP.NET WebForms 和 MVC。 虽然 MVC 显然看起来像是 FrontController 的实现,但我对 WebForms 页面不太确定。因此,如果有人可以帮助解决以下问题,我将不胜感激。

  1. WebForms 是否基于 PageController 模式?

  2. 前端控制器和页面控制器都是 MVC 的修改版本吗?

  3. WebForms 是否也可以称为 MVC 的一种特殊情况,控制器和视图之间的区别是模糊的?

最后,网上有什么好的资源可以提供关于这个话题的详细参考吗?

【问题讨论】:

    标签: asp.net asp.net-mvc design-patterns


    【解决方案1】:

    ASP.NET MVC 基于前端控制器设计模式。经典 ASP.NET WebForms 基于 Microsoft 通过隐藏和抽象许多部分将 Windows Forms 事件模型引入 Web 的努力,您可以应用 page controller 模式,但它不是开箱即用的。

    【讨论】:

      【解决方案2】:

      按照你的问题顺序:

      1//没有。 Web 表单基于“智能 UI”模式,即您通过编写事件处理程序来控制应用程序。智能 UI 有它的问题,但是当完全基于桌面时它可以正常工作,因为没有在框架中引入任何主要的“虚构”来使其工作。然而,对于通过无状态 HTTP 工作的 Web,引入了一个主要的虚构,本质上是以 ViewState 的形式,当页面发送到客户端浏览器时,它保存所有控件的状态。结果,Web 表单在您的应用程序中引入了一层复杂性,仅用于维持这种虚构。 MVC 消除了这种虚构。

      小说本质上是说:我们将假装在我们和客户端之间不存在 HTTP。

      2//MVC 消除了虚构并为您提供了裸 HTTP。然而,它更多地基于前端控制器而不是页面控制器模式,因为页面控制器模式使得独立于 Http 请求测试控制器变得困难,而 MVC 专门设计用于使控制器独立于 HTTP 请求可测试。换句话说,MVC 旨在支持在控制器上进行单元测试,而不是集成测试。

      MVC 专注于模型与视图的分离,而 Webforms/Smart UI 并没有做出这种区分。

      我想你可以说,为了从 ASP.NET MVC 中删除页面控制器,ASP.NET 将 HTTP 对控制器的影响重构为“正交属性”,这不是我被引导相信的方式页面控制器模式有效。但是,不要引用我的话,我是这些东西的学生,而不是专家。

      3//不,绝对不是!如上所述,网络表单是虚构的智能用户界面,而不是任何形状或形式的 MVC。您可以通过一些箍来使它们成为某种 MVC ish(a la Dino Esposito),但这又是一个虚构的。如果您拥有 ASP.NET MVC,为什么还要沉迷于小说?

      最后的侧翼。我从 webforms 切换到 mvc 的原因是 Wizard Server Control。它的“事件模型”是一个残酷的东西,面对我需要实现的一切(更不用说其他属性、方法的令人窒息的扩散......糟糕!)。

      在 10 天内,我编写了一个基本的 WizardController,现在我的向导是美丽、优雅和简单的东西。我很高兴地放弃了 3 个月的 web 表单向导工作,将它们转换为我的新迷你向导框架。太糟糕了。

      【讨论】:

        【解决方案3】:

        就这个主题的参考资料而言,我会推荐 Dino Esposito 和 Andrea Saltarello 的书“Microsoft .NET: Architecting Applications for the Enterprise”以及 Dino 的 ASP.NET Presentation Patterns 文章。

        【讨论】:

          猜你喜欢
          • 2011-07-04
          • 2012-08-31
          • 1970-01-01
          • 2015-11-30
          • 1970-01-01
          • 2010-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多