ASP.NET webforms和MVC基于哪种模式?页面控制器,前台控制器?

ASP.NET webforms和MVC基于哪种模式?页面控制器,前台控制器?,asp.net,asp.net-mvc,design-patterns,Asp.net,Asp.net Mvc,Design Patterns,我试图从理解所使用的设计模式的角度来理解ASP.NETWebForms和MVC。 虽然MVC看起来很像FrontController的实现,但我对WebForms页面不是很确定。因此,如果有人能就以下问题提供帮助,我将不胜感激 WebForms是否基于PageController模式 Front Controller和Page Controller都是MVC的修改版本吗 WebForms也可以被称为MVC的特例,在MVC中控制器和视图之间的区别是模糊的吗 最后,web上有没有什么好的资源可以提供

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

  • WebForms是否基于PageController模式

  • Front Controller和Page Controller都是MVC的修改版本吗

  • WebForms也可以被称为MVC的特例,在MVC中控制器和视图之间的区别是模糊的吗


  • 最后,web上有没有什么好的资源可以提供有关此主题的详细参考?

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

    按照问题的顺序:

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

    这个虚构的故事本质上是这样的:我们将假装HTTP不在我们和客户机之间

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

    MVC侧重于模型与视图的分离,而Webforms/SmartUI则没有这种区别

    我想你可以说,为了从ASP.NET MVC中消除页面控制器,ASP.NET将HTTP对控制器的影响重构为“正交属性”,这不是我认为页面控制器模式工作的方式。但是,不要引用我的话,我是这些方面的学生,不是专家

    3//不,绝对不是!如上所述,webforms是虚构的智能ui,而不是任何形式的MVC。你可以通过几个篮圈让他们成为MVC(拉迪诺·埃斯波西托),但这又是一个费西顿。如果你有ASP.NETMVC,为什么还要沉迷于幻想

    最后一个侧面。我从webforms切换到mvc的原因是向导服务器控件。它的“事件模型”是一个残酷的东西,它与我需要实现的一切都背道而驰(更不用说其他属性、方法……恶心!)


    在10天的时间里,我写了一个基本的WizardController,现在我的向导是美丽、优雅和简单的。我很高兴地放弃了3个月的webforms向导工作,将它们转换为我的新迷你向导框架。就这一主题的参考文献而言,我推荐迪诺·埃斯波西托(Dino Esposito)和安德里亚·萨塔雷洛(Andrea Saltarello)的《圣经》以及迪诺的文章