ASP.NET/关于ASP.NET

维基教科书,自由的教学读本

ASP.NET支持三种模式:Web Pages、Web Forms和ASP.NET MVC

Web Pages[编辑]

Web Forms[编辑]

Microsoft发布的ASP.NET,通过在http的无状态和为开发人员模拟状态的模型上创建更高层次的抽象解决了asp中存在的很多问题。在web forms框架中引入一些新概念比如:“self postback”(提交表单数据到本页)、“ViewState”(在postback回调期间维护视图状态)等。在web forms框架,微软已尝试将可视化模型引入到web应用程序开发中。

优点:
  1. Web Forms支持丰富的服务器控件:单纯的HTML客户端控件时,在不同浏览器终端,控件的展现并不总是一致。ASP.NET服务器控件会检测到浏览器种类并生成对应的html和javascript。很多服务器控件像GridView和ListView可以绑定数据,从而减少了大量的代码编写。
  2. 支持视图状态ViewState:“HTTP是无状态的协议”,通常在多个请求之间控件不会保持控件值。Web Forms框架中通过将每个控件状态以“隐藏域”的形式存在当前表单页面来达到“有状态”,这就是视图状态。
  3. 事件驱动编程,提供了:
    • Code-Behind (代码后植)技术:ASP.NET通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像ASP以前那样后台代码和html代码都混在一起,难以维护。
    • 自动回发机制(Self postback mechanism)
    • 开发人员不再依赖POST、GET方法来处理用户与服务器之间的交互。可以拖控件放到页面上(比如按钮),只需要双击控件以生成对应的后台代码以在服务器上处理用户的点击逻辑。
    • 快速应用程序开发:丰富的服务器控件,事件驱动模型和视图状态都很大程度上增加了开发速度,开发者将透明化这背后复杂的实现,从而能更关注应用程序的业务逻辑。ASP.NET Webforms是一个RAD/VISUAL(快速可视化)的Web程序开发技术。也就是说,开发者简单地拖拽控件到窗体设计器上,VS就会在Behind Code(aspx.cs文件,译者注)生成代码。换句话说,你向设计器中拖放一个Button按钮后,便可以在它的事件处理程序中编写代码了。
    • 学习成本低。使用强大的服务器控件和视图状态的开发者,可以开发实用的应用程序而不需要太多HTML和Javascript技能。
缺点
  1. 没有预定义的项目架构。开发者可以灵活的选择他们想要的项目架构。你可以选择基本的三层架构来将系统分成表现层(UI)、业务逻辑层(BLL)、数据层(DAL)或者更先进的MVP(Model-View-Presenter)架构。也可以选择只使用code-behind技术,将所有逻辑都写在这,但这并不是一个好的项目架构方案。
  2. 单元测试:在Web Forms架构的code-behind技术中,使用了大量的事件处理函数,让其不可能进行自动单元测试。
  3. 可重用性。让我们讨论另一个示例,我们构建两个UI:纳税员工页面与非纳税员工页面。现在这两个页面将共用大部分后台业务逻辑。创建一个页面后,通过添加一些if判断条件创建第二个页面。 这将违反程序设计的单一职责原则,即一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。
  4. 不能完全控制HTML:Web Forms架构中,很多时候我们无法确定服务器控件在终端浏览器中生成的html,这样很难集成第三方JavaScript 库,如jQuery。
  5. SEO:URL指向特定的ASPX页面,可能还包含一些查询字符串。这样对于搜索引擎来说是不友好的。
  6. 缺少并行开发支持:ASPX页面和后台代码文件是紧密耦合的,所以不方便2个开发者同时开发页面和后台代码。

ASP.NET MVC[编辑]

MVC是一个架构模式,微软将它引入到ASP.NET MVC架构中。MVC系统分为M(Model),V(View) 和 C(Controller)。

  • Model,是数据容器,不包含任务业务逻辑。
  • Controller,接收并分配用户交互逻辑或输入逻辑发出的请求,它需要知道MVC的Model和View。
  • View,被定位为模型数据的输出展现,它可能是一个excel表格,一个显示记录列表的web页面或一个简单的文本。它只需要知道MVC的Model。

ASP.NET MVC不支持ViewState和服务器控件。

优点:
  1. 项目架构。ASP.NET MVC架构降低了程序间的耦合性
  2. 测试驱动开发和重用性
    • MVC的Controller,是一个独立的类,所以支持测试驱动开发。
    • MVC的Controller,不绑定任何特定的View,所以能重用于多个View。
  3. 性能:ASP.NET MVC框架不支持ViewState,所以不会有自动状态管理机制,从而降低了页面传递的尺寸,提高了程序性能。
  4. 完全的HTML控制:ASP.NET MVC 不支持服务器控件,唯一的选择是使用客户端输入控件,这样我们能完全控制最后展现的html。所以ASP.NET MVC 架构能很容易的与第三方JavaScript库(eg:Jquery)集成开发。
  5. 支持并行开发:ASP.NET MVC架构中的各层是松散耦合的,所以一个开发者在开发Controller的同时第二个开发者开发View并且第三个开发者开发Model。这就是所谓的并行开发。
  6. SEO,URL重写和REST:丰富的路由规则让每个URL被视为一个资源,即支持RESTful。同时,用户用好的、可读的URL能改善SEO。
  7. 可扩展:ASP.NET MVC支持多种视图引擎,eg:aspx、razor,如果需要还能开发自己的视图引擎。
  8. 继承ASP.NET特性:ASP.NET MVC框架构建在成熟的ASP.NET框架之上,所以提供开发者很多好功能,如表单验证、windows身份验证、缓存、会话等等。
缺点:
  1. 提高了学习成本:没有事件驱动编程模型和视图状态,使得对于缺少web应用开发经验的开发者来说很难上手。