WebForms和MVC

介绍 我做ASP已经有很长一段时间了。NET开发人员和我确实喜欢使用web表单编写web应用程序。 2008年微软推出了一种叫做ASP的东西。NET MVC,我对这个事实感到非常惊讶 “为什么多一个ASP ?”网络技术要求” 许多人仍然在思考同样的问题。 很多人说ASP。NET MVC取代了ASP。净Web表单。 但这不是真的。两者都有各自的优点和缺点 没有人能告诉或教我们什么时候使用什么,但是我们可以讨论一些事实,这将帮助我们在两者之间做出选择。这篇文章也包含同样的内容。 我们也试图找到一些问题的答案,比如, ASP.NET是什么?什么是ASP。净Web表单吗?MVC是什么?什么是ASP。净MVC吗? 如果你是高级或有经验的ASP。NET MVC开发人员,已经非常了解MVC,这篇文章将帮助您修改您的概念。 索引/内容 谈论可视网络技术什么是ASP.NET?什么是Web表单?ASP。什么是MVC?什么是ASP。净MVC吗?为什么ASP。NET Web表单和为什么ASP。净MVC吗?结论 讨论视觉 微软最初想出了一个叫做 视觉。在Visual Basic等技术的帮助下,Visual c++ Microsoft支持图形用户应用程序的快速应用程序开发(RAD)。拖放和智能感知等特性使开发人员更多地关注应用程序的业务功能,而不是UI设计。 但这些技术仅限于桌面,当涉及到web时,微软唯一的选择就是ASP。 网络技术 当我们说到web技术时,我们有经典的ASP、php、jsp、ROR、ASP。NET Web表单,ASP。NET MVC等等。 经典的ASP是微软公司引入的web技术之一。经典ASP最大的痛点是意大利面条般的代码和 可维护性。 让我们假设一个场景,其中有一些文本框和一个按钮。单击按钮时,使用服务器验证数据,如果验证成功,数据将存储到数据库中,如果验证失败,将以红色标签的形式向用户显示错误消息。 你知道这种情况下最大的问题是什么吗?你必须自己做很多事情。 首先通过将form的action属性的值设置为相同的页面来返回自发布。 文本框的值将在单击按钮时被清除,因此只剩下选项将从已发布的数据中检索值。 如果验证失败,则必须显式地进行验证 设置所有的值返回到相应的文本框中,从发送的数据显示错误消息。 (使用Ajax是另一种方法。在这里,我试图解释需要用传统ASP完成的手工工作) 视觉在网络 像Visual Basic这样的技术仅限于独立的应用程序,当涉及到web时,微软唯一的选择就是经典的ASP。 当我们谈到Web和桌面时,有两件事应该被考虑 状态管理是如何工作的? 请求/响应是如何运作的吗? Web工作在HTTP上,这是完全无状态的协议。我们将拥有独立于以前的请求和响应的请求和响应。与桌面不同,没有变量值将被保留,也没有完整的事件驱动编程模型。与desktop一样,它将等待用户输入,但每个用户输入和交互都作为对服务器的新请求(get/post)。 最后微软发明了一种叫做ASP的东西。NET Web表单,优先考虑快速的应用程序开发和简单的学习。 ASP.NET是什么? ASP。NET是微软的一个Web应用程序框架,它建立在公共语言运行库上,用于使用c#、VB等编程语言构建动态网站。净等。 它支持2种模型的Web表单和ASP。净MVC。 什么是Web表单? 微软首先推出了ASP。通过在无状态Web上创建更高层次的抽象和模拟有状态模型,为Web开发人员解决了许多问题。 在web表单中引入了自回发(将表单数据发送到同一页面)和ViewState(在回发期间维护控件值)等概念。最有趣的部分是,它甚至不需要写一行代码。 通过Web表单,微软试图将Visual Basic模型带入Web。 让我们来谈谈Web表单的优点和缺点。 优点: Web Forms支持富服务器控件。 在使用纯HTML时,您可能已经注意到,事情并不总是完全相同的。一个在IE中看起来很棒的UI在Firefox中可能会分散注意力,反之亦然。NET服务器控件检测浏览器并生成适当的html,如果需要还可以生成JavaScript。许多服务器控件,如GridView和ListView,提供了数据绑定功能,减少了大量工作和代码编写。支持ViewState——你可能听过好几次“HTTP是无状态协议”。通常,控件不会在请求之间保留它们的值。但在Web Forms中,有状态性是通过将每个控件的最后已知状态以称为ViewState的隐藏字段的形式存储在客户端页面本身来实现的。 事件驱动程序设计- 有…的帮助 微软在internet世界中引入了事件驱动编程。 开发人员将不再依赖POST、GET方法来处理用户与服务器的交互。 例如,他/她将control(按钮)拖拽到页面,双击它就会生成处理用户点击服务器的代码块,写下其中的逻辑。就是这样。她/他不关心内心发生了什么。 快速应用程序开发 我认为对此不需要任何解释。富服务器控件、事件驱动模型和视图状态极大地提高了开发速度,将开发人员从许多复杂的后台抽象出来。 更少的学习努力。-使用强大的服务器控件和ViewState开发人员可以开发真实世界的应用程序与最小的HTML和JavaScript技能。 缺点: 项目架构 当涉及到web表单时,没有用于创建web应用程序的固定的预定义项目架构。开发人员有完全的灵活性来选择他们自己的架构。 可以使用基本的三层架构将系统划分为UI层、业务层和数据访问层,也可以使用更高级的架构 Model-View-Presenter。甚至有人可能只选择后面的代码,然后在那里写所有的东西,这一点都不被认为是好的实践。 后面的代码与UI紧密相连,以一些表示逻辑结束。 单元测试 在Web Forms中,后面的代码需要使用大量的事件处理程序,这使得自动单元测试成为不可能完成的任务。 注意:根据我的知识,即使在模拟测试的帮助下(使用MOQ或rhinomoq),我们也不能在事件处理程序中模拟' sender '和' eventargs '。 当我们谈到使用TDD时,后面的单元测试代码(表示逻辑)变得非常重要。 性能 ViewState成为解决一些问题的经典ASP,但它也成为一个问题。ViewState存储在页面本身,导致页面大小增加,从而降低性能。 可重用性 让我们讨论另一个我们应该构建2个UI的例子 现在,对于这两个屏幕,逻辑背后的大部分代码都是相同的。 一种解决方案是,在后面的代码中添加一些if条件,然后创建单个UI。 这将违反 单一责任原则,即软件实体的变更只有一个原因,因为在这种情况下,只要任何应税/非应税信息发生变化,员工表格就会发生变化。其次,用户界面对HTML的控制可能会减少——在Web表单中,很多时候我们不确定最终会得到什么HTML,这使得与jQuery等JavaScript框架的集成成为一项困难的任务 搜索引擎优化, URL的指向固定的ASPX页面,可能装饰一些查询字符串。它们对用户不友好,影响搜索引擎优化。 对并行开发的支持较少——ASPX页面与代码文件紧密耦合。所以不可能有两个不同的开发人员同时在一个部分上工作(一个在aspx上,一个在后面的代码上)。 ASP。NET 4.0 ASP。NET 4.0提供了一些很好的特性来克服上面的一些问题 ViewState:提供禁用或控制ViewState大小的方法。 (但没有强制或固定的规则会说要这样做。)URL路由:使用URL路由,我们可以提供自己的URL来代替页面的物理路径。ID:在ASP。在NET 4.0中,我们可以更好地控制元素的Id,从而更容易地与JavaScript框架集成。(我们仍然不能完全控制HTML的生成。) 即使ASP.NET有了革命性的特性, 它仍然不能解决单元测试的问题,我从来没有看到任何ASP。试图禁用视图状态的asp.net Web窗体开发人员。 (这是我的观点,请不要生气。)我们可以控制元素的ID,但不能完全控制HTML,实现JavaScript仍然有问题。 MVC是什么? MVC是一种已经存在了很长时间的架构模式。许多人正在使用它,包括Java。这并不是微软提出的新概念。 ASP。NET MVC是我们应该讨论的。但在此之前,让我们澄清一些术语,包括MVC。 模式——简单地说,模式是对上下文中问题的解决方案。 体系结构模式——体系结构模式是在子系统级别或较短的模块级别上解决问题的东西。它处理与项目架构相关的问题。它告诉我们如何划分我们的系统,特别是为什么。我们创建类库、组件、Web服务来解决这个问题。 MVC 当我们谈到应用程序时,我们会用到输入逻辑、业务逻辑和UI逻辑,而MVC是一种架构模式,它让我们开发的应用程序在这些元素之间具有松散耦合。MVC模式背后的主要意图是关注点分离。它使得表示或UI忽略了业务和用户交互逻辑。按照MVC系统应该分为M(模型),V(视图)和C(控制器)。 模型被认为是智能的,它处理业务规则、逻辑和数据,并且将独立于MVC的其他部分(控制器和视图)。控制器接收和分发请求,简言之,它处理用户交互和输入逻辑。它知道模型和视图。视图被认为是哑的,它是模型数据的输出表示。它可能是一个excel表格,一个显示记录列表的网页,或者只是一个简单的文本。视图只知道模型。 什么是ASP。净MVC吗? ASP。NET MVC是微软的又一个Web应用程序框架,在设计时考虑了关注点分离和可测试性。它建立在CLR之上,完全基于MVC架构,所以我们从控制器和视图的角度来考虑。 ASP。NET不支持ViewState和服务器控件,所以我们在这里得到了旧web的感觉。 让我们谈谈ASP的优点和缺点。NET MVC 优点: 项目架构- 使用ASP的一个优点是。NET MVC是它强制分离的关注点。所以把事情变得更复杂的可能性很小。 测试驱动开发和可重用性- 在MVC控制器中是一个独立的类,所以自动测试是可能的,以测试驱动开发。控制器不绑定到任何特定的视图,因此可以被多个视图重用。 性能——ASP。NET MVC不支持视图状态,所以不会有任何自动的状态管理来减少页面大小,从而获得性能。 完全控制的HTML - ASP。NET MVC不支持服务器控件,唯一可用的选项是使用html输入控件,所以我们将确定最终的html呈现在最后。我们还将注意到每个元素的'id'。ASP的集成。NET MVC应用程序与第三方JavaScript库,如jQuery变得很容易。支持并行开发——在ASP中。NET MVC层之间是松散耦合的,所以一个开发人员可以在控制器上工作,同时另一个开发人员在视图上工作,第三个开发人员在模型上工作。这叫做并行开发。SEO、URL路由和富REST的路由特性让我们可以将每个URL视为支持RESTful接口的资源。 用户友好和可读的URL也改善了SEO。 可扩展性——ASP。NETMVC支持多种视图引擎,如aspx, razor,如果需要,我们可以创建自己的。现有的ASP。NET特性- ASP。NET MVC框架是建立在成熟的ASP之上的。NET框架,从而为开发人员提供了许多好的特性,如表单身份验证、windows身份验证、缓存、会话和配置文件状态管理等。 缺点: 更多的学习努力-缺乏事件驱动的编程模型和视图状态让ASP。NET MVC对于没有或没有web应用程序开发经验的开发人员来说是一个非常困难的框架。 ASP。净MVC的作品 用户请求服务器中的一些资源(通过在浏览器中放置一些URL)。请求首先到达控制器(路由引擎负责决定哪个控制器将处理哪个请求)。在本文中,我们不会深入讨论这种行为)。控制器在需要的情况下与模型进行数据对话。模型对数据库(或其他数据源)进行操作,并将数据(以业务对象的形式)返回给控制器。控制器选择适当的视图(比如客户视图,它可能包含一些html表,下拉列表,文本框…)控制器将数据(在步骤4中检索的模型数据)传递给选择的视图(在步骤5中),根据方便的情况在其中填充数据。控制器发送回视图给用户。 这是对于get请求,对于post也是一样。用户将在已经请求的页面上执行一些操作,而不是将URL放在浏览器中,流将从控制器开始。动作如点击按钮,改变下拉值等。 为什么ASP。NET Web表单和为什么ASP。净MVC吗? 根据应用程序的需求和所涉及的团队成员的背景,每个都可以是特定解决方案的“最佳选择”。选择什么和什么时候选择,与商业前景的关系更大,而不是哪一个更好。 当面临抉择时,ASP。NET Web表单或ASP。重要的是要知道这两种技术都不是用来取代另一种的。 在做选择时,你应该考虑的两个重要因素是 快速应用程序开发- 如果你想快速开发任何东西,ASP。NET Web Forms是你拥有的唯一机会,你甚至不能考虑ASP。NET MVC用于RAD。 (应用程序快速开发的原因可能是客户不需要支付太多费用,或者应用程序只会使用一两个月,不需要太多维护。) 单元测试——如果自动单元测试对你来说是最重要的因素,那么MVC将是最适合你的。 除此之外,您可以做的是,写下您所有的项目需求,并尝试将它们与Web表单和MVC的优缺点进行比较,如果可能的话,尝试问自己以下问题,并相应地指出MVC和Web表单 您的团队有使用Web表单或Windows表单的良好经验吗?好吧,如果是,那么可能学习ASP。NET MVC对于团队来说将是一项乏味的任务,因为开发人员已经习惯了ViewState和事件驱动编程,迁移将是一项困难的任务。1点Web表单。你的团队对ASP有很好的经验吗?净MVC吗?如果是ASP。你的团队在ASP或非微软技术,如android, ios, JSP, ROR, PHP上有经验吗?如果您以前是JSP或ASP开发人员,那么您可能熟悉HTTP get和Post,甚至您可能接触过MVC,因为它们中的大多数默认使用MVC。它给了ASP 1个点。净MVC。 JavaScript会被广泛使用吗?如果是,MVC就很有用了,因为你可以完全控制HTML。1点ASP。净MVC。寻找良好的表现?不支持ViewState的asp.net。与传统的asp.net MVC相比,NET MVC提供了良好的性能增益。NET Web Forms.1点ASP. NET净MVC。计划重用相同的输入逻辑?如果是,坚持使用MVC。 结论 我认为你应该有足够的信息来决定什么对你的项目是最好的。完整的决定取决于您的团队和项目需求。 希望大家都喜欢这篇文章。谢谢你的耐心。 用于与各种主题相关的技术培训,包括ASP。NET,设计模式,WCF和MVC联系人 SukeshMarla@Gmail.com,或者 www.sukesh-marla.com 想了解更多类似的内容,请点击这里。 订阅文章更新或关注twitter @SukeshMarla 也完成了我们的全部 逐步MVC系列(模型-视图-控制器) 点击这里看MVC视频一步一步。 本文转载于:http://www.diyabc.com/frontweb/news1828.html