本文地址:WebForms vs MVC 余文 翻译 原文地址
我做ASP.NET已经有很长一段时间了,而我也很享受用web forms 开发网页程序。
微软在2008年推出了一种叫做 ASP.NET MVC 的技术,当时的我对于“为什么需要另一种 ASP.NET 技术”C 这个事情相当的困惑。而很多人现在依然在想这个问题。
很多人说ASP.NET MVC 是用来替换ASP.NET Web Forms的。但这不是事实。这两种技术各有长短,没有谁能简单的告诉或者教会我们什么时候该用什么。但是我们可以讨论一些可以帮助我们在两种技术中间做出选择的客观因素。而这篇文章就包括一些这样的客观因素。 | ![]() |
![]() |
我们同时也尝试解答以下问题。,
|
如果你是一个已经非常熟悉ASP.NET MVC的高级的或者经验丰富的ASP.NET MVC开发者,那么这篇文章将帮助你修正你的某些看法。
![]() |
微软最初提出了可视化开发的概念。在Visual Basic,Visual
C++之类的技术的帮助下,图形用户程序的快速开发成为可能。拖拽和智能感应之类的功能使程序员能将更多的精力投入到程序的业务逻辑中而不是UI 设计中。
但是这种技术起初只能在桌面程序开发中使用,当开发web 程序时,微软只提供了ASP技术。 |
当我们说web技术的时候,我们有经典ASP,php,jsp,ROR,ASP.NET Web Forms,ASP.NET MVC 以及其他很多技术。经典ASP 是微软推出的web 技术之一。经典ASP 的最让人头疼的是一团乱麻一样的代码和糟糕的可维护性。让我们假设这样一个场景,你有一些text box 和一个button,当你点击button的时候你在server端验证数据,如果数据合法,那么数据被存入数据库。如果数据不合法,那么错误信息将以红色label的形式展示给用户。你知道这个场景中最大的问题是什么吗?你不得不自己处理很多东西。
(使用Ajax 是一种可选的方法。这里这样做只是想解释使用经典ASP所需要做大手动工作)
Visual Basic之类的技术只限于做独立的程序,在web方面,微软当时给出的唯一选项就是ASP。
当我们讨论Web和桌面的时候,我们需要考虑两个问题
Web工作依赖的HTTP协议是一个无状态的协议。我们发出的request 和收到的response都是独立于前面的request和response的。它不像桌面程序那样有可以保存的变量和复杂的事件驱动模型。它像桌面程序一样等待用户输入,但是用户的每一次输入和交互对server都是一次全新的request(get/post)。
最终微软提出了ASP.NET Web Forms,一种已经优先考虑了快速开发和简单易学的技术。
ASP.NET是微软的Web程序框架,它建立在标准语言运行时上,用于开发动态网站,使用C#,VB.NET之类的语言进行开发。它支持两种模式,Web Forms和ASP.NET MVC。
在ASP技术之后微软推出了ASP.NET Web Forms,它通过对无状态的web进行高层次的抽象和模拟状态模型为Web开发人员解决了很多问题。在web forms引入了 postback(将数据传给同一个页面)和ViewState(在postbacks时管理控件状态)之类的概念。而最令人关注的是它不需要写一行代码。通过Web Forms微软尝试将Visual Basic 模式引入到web中。
让我们讨论一下Web Forms的优点和缺点吧。
![]() |
|
开发者不再需要依赖POST,GET方法来处理用户和服务的交互。比如,他拖动一个叫button的控件拖动到页面中,只需要双击一下就会生成用于在服务端处理用户点击的代码块,之后在里面写下逻辑代码就好了。这就成了,他不需要关注里面怎么实现的。
当使用Web Forms开发web程序时没有固定的项目架构,开发者有充分的灵活来选择他们自己的架构。
有些人可能选择基本的三层架构将系统分成表现层(UI),业务逻辑层(BLL)和数据访问层(DAL)或者更先进的比如MVP(Model-View-Presenter)架构。甚至有些人可能选择只使用code
behind技术,将所有的代码都写在那里,当然这并不被认为是一种好的实践。Code behind 紧紧的和UI联系在一起,最终实现一些显示的逻辑。
在Web Forms的code behind技术中使用了很多事件处理,这使自动单元测试成为了不可能的任务。
另:
就我所知,就算有mock测试(使用MOQ或者rhinomoq)我们也不能模拟eventhandlers中的‘Sender‘和‘eventargs‘。
而我们要使用TDD(测试驱动开发)时,对后台代码(显示逻辑)进行单元测试变得很非常的重要。
ViewState是经典ASp中一些问题的解决方案,但它同时是一个问题。ViewState存储在页面本身中导致页面变大以致影响性能。
URL
指向特定的ASPX页面,还可能附加了一些查询字符串。这对用户不友好并且不利于搜索引擎优化。
ASP.NET 4.0 发布了一些新功能来解决一些上面提到的问题
即使在ASP.NET革命性的功能演进之后,
MVC是一个已经被广泛使用的架构模式
包括Java在内的很多语言使用它。它不是微软提出的新观念。接下来我们将要讨论ASP.NET
MVC。但在此之前让我们先搞清楚一些包括MVC在内的概念。
![]() |
|
ASP.NET MVC 是微软的另一个Web程序框架,它设计时及以考虑到代码分离和可测试性。它建立在CLR之上并且完全基于MVC架构。因此我们考虑问题是要从视图和控制器的角度思考。ASP.NET MVC不支持VIewState和服务器控件。因此我们有开发老式web程序的感觉。让我们讨论一下ASP.NET MVC的优点和缺点吧。
![]() |
使用ASP.NET MVC 的一个好处是它强制分离联系,因此基本不会把结构搞的复杂。 |
|
![]() |
同时对用户友好和可读的URL有利于SEO。
上面说的是get请求的过程,对post而言也一样。只是用户触发请求的方法是在已经获得的页面上作一些操作,比如点击button,改变下拉框的值等,而不是在浏览器中输入一个URL。
对于一个特定的程序来说,哪一个都可以是最好的选择,这要看程序的要求和参与项目的成员的背景。什么时候选择哪一个更多的是看业务预期而不是哪个比哪个好。当面临SP.NET Web Forms 和ASP.NET MVC的选择时,知道没有哪个技术是用来代替另一个技术这一点很重要 当作出选择时,以下两个因素需要考虑到
Two important factors you should consider while making the choice is除此之外,你可以写下你的项目的所有需求然后将它们和Web Forms 和MVC的优缺点比较。如果可以的话试着问你下面这些问题然后据此决定选择哪一个。
我想你应该已经获得了足够的信息来决定哪一个对你的项目更好,决定依赖于你的团队和项目需求。
希望大家喜欢这篇文章,感谢耐心读完。
本文以及相关源代码及文件,在 The Code Project Open License (CPOL)许可下。
原文:http://www.cnblogs.com/yuwen/p/WebFormsvsMVC.html