我正在阅读这份文件
http://msdn.microsoft.com/en-us/library/dd381412(VS.98).aspx
具体的优点和缺点:
基于MVC的Web应用程序的优点
ASP.NET MVC框架具有以下优点:
通过将应用程序划分为模型,视图和控制器,可以更轻松地管理复杂性。
它不使用视图状态或基于服务器的表单。这使得MVC框架非常适合希望完全控制应用程序行为的开发人员。
它使用Front Controller模式,通过单个控制器处理Web应用程序请求。这使您可以设计支持丰富路由基础结构的应用程序。有关更多信息,请参阅前端控制器。
它为测试驱动开发(TDD)提供了更好的支持。
适用于大型开发团队和需要高度控制应用程序行为的Web设计人员支持的Web应用程序。
基于Web窗体的Web应用程序的优点
基于Web窗体的框架具有以下优势:
它支持通过HTTP保留状态的事件模型,这有利于业务线Web应用程序开发。基于Web窗体的应用程序提供了数百个服务器控件支持的许多事件。
它使用页面控制器模式,为各个页面添加功能。有关更多信息,请参阅页面控制器。
它在基于服务器的表单上使用视图状态,这可以使管理状态信息更容易。
适用于希望利用大量可用于快速应用程序开发的组件的Web开发人员和设计人员团队。
一般来说,应用程序开发的复杂性较低,因为组件(Page类,控件等)紧密集成,通常需要的代码少于MVC模型。
因为我是MVC的新手而不是webforms,我对这个优点和缺点有以下问题:?
MVC没有视图状态?那么如何在当前页面中保存数据呢?这似乎是一个非常大的劣势。
Webform说,提供一个包含大量控件的广泛事件模型,不作为普通网络表单的,不支持MVC支持控件和事件吗?
让我们假设我是两者的专家?我为什么要选择其中一个? 到目前为止,我认为MVC唯一的好处就是可测试性,因为webforms中的快速应用程序开发在很多方面都赢得了MVC。(仅限我的观点)
现在谈论RazonEngine,它似乎回到旧的ASP,你不能使用服务器端控件?这对我来说有什么好处?
答案 0 :(得分:10)
1)MVC没有视图状态?那么如何在当前页面中保存数据呢?这似乎是一个非常大的劣势。
为什么要保存页面中的内容?这就是数据库应该做的事情。保存数据。在页面中,您只需使用隐藏字段,即可从最初存储的位置重新获取数据。对于可以改变的数据,你有表单输入字段,所以它就在那里。
2)Webform说,提供一个包含大量控件的广泛事件模型,不是MVC支持控件和事件作为普通的webform吗?
不,MVC不支持控件和事件。它支持模型,控制器和视图。
让我们假设我是两者的专家?我为什么要选择其中一个?到目前为止,我认为MVC唯一的好处就是可测试性,因为webforms中的快速应用程序开发在很多方面都赢得了MVC。
这是一个没有客观答案的主观问题。我能给你的答案是:它取决于具体情况。我同意RAD在WebForms中获胜,但你必须记住的是,这不是应用程序的开发成本最高的。这是它的支持和维护。因此,如果您的应用程序是快速编写的,那么您确实可以快速发送它,但如果您没有正确地构建它,那么这个快速的应用程序开发会慢慢变成一场噩梦,直到有一天您只需要重写它因为继续支持它会花费你很多。
现在谈论RazonEngine,似乎又回到了原来的状态 ASP,你不能使用服务器端控件?这有什么优势呢? 我吗?
您可以完全控制标记,您的页面不再受到无用ViewStates的污染,最后您的标记会被验证。如果要在ASP.NET MVC中重用某些视图部分,可以使用部分视图。
以下是我可以给你的建议。由于您已经是WebForms的专家,因此在学习ASP.NET MVC时,这将是一个很大的优势。所以学习它并通过学习它你可能会开始自己看到不同的优点,并能够回答你自己的问题,哪一个更适合你。
答案 1 :(得分:5)
ASP.NET MVC应用程序让您可以控制应用程序的工作方式,并且它符合HTTP / HTML的“本机”模型。
WebForms是Web应用程序编程的抽象;设想简化Visual Basic程序员的过渡,这些程序员在.NET启动时是.NET的主要目标。麻烦的是,这是一个“漏洞的抽象”。它使用封面下的“技巧”使其看起来像对于习惯于VB的基于事件的模型(如视图状态和回发)的操作简单。这个问题(以及所有那些“泄漏的抽象”)的问题在于,虽然基本的东西很容易,但是一旦你尝试做一些不适合抽象的东西,它就会变得非常复杂。
如果您的应用程序是微不足道的,并且WebForms抽象始终适合您,请随时坚持使用它。微软已经足够考虑继续支持它。
但如果你的应用程序完全复杂或复杂(现在越来越多),我建议以开放的心态看待MVC。
作为一项测试,请从非Microsoft背景的Web开发人员处理,让他们在webforms和MVC上松散,看看他们的工作效率更高。
答案 2 :(得分:4)
ViewState是一个诅咒,对于那些不了解HTTP是无状态协议的人来说是一个拐杖,并试图在一个hacky解决方案中坚持跨越请求持久化状态,导致大规模失败。
简单地说,它根本不是用户友好的。
这些控件上的标记也很可怕。
关于UserControls:您可以使用Partials模拟Controls的一些功能。
事件:您通过控制器中的操作为事件建模。
火焰战争开始了!
答案 3 :(得分:1)
webforms中的快速应用程序开发以多种方式赢得MVC
是。如果您需要RAD,请使用WebForms,如果您更依赖JavaScript,CSS和HTML,请使用MVC。