• ASP.NET Web Form 与 ASP.NET MVC 区别


    Asp.net 微软提供web开发框架或者技术。分Web Form和ASP.NET MVC。下面简单说明各自优缺点及使用场景。

    Web Form

    ASP.NET Webform提供了一个类似于winform的事件响应GUI模型(event-driven GUI),隐藏了HTTP、HTML、JavaScript等细节,将用户界面构建成一个服务器端的树结构控件(Control),每个控件通过ViewState保持自己的状态,并自动把客户端的js事件和服务器端的事件联系起来。这种做法使得开发WinForm和WebForm程序具有相近的开发体验,填平WinForm开发(有状态、面向对象的)和WebForm开发(无状态、面向HTML的)之间的鸿沟。

    这种设计在大型网站开发的时候,暴露出一系列弱点:

    ViewState可能过大。访问量非常大的情况下,viewstate占用的流量相当可观,这样直接影响页面传输速度。
    Page Life Cycle(页面生命周期):过于复杂。比如控件的Init事件在Page的Init事件之前执行,而Load事件是控件后执行。事件处理的事件
    缺乏对HTML的控制:一般每个控件负责自己的HTML输出,开发人员无法修改输出的HTML结构,除非自己写控件。而且HTML元素的ID比较复杂,也不便于js访问。
    界面设计和逻辑开发的关注分离做的不好:Webform开发是一个页面对应一个code-behind class,原本的目的是将展示和逻辑分离。但是在实际开发的时候,面对某些需求,还是经常会在class中写一些控制界面展示的代码。
    对测试的支持不好:页面和code-behind class绑定在一起,无法单独对逻辑进行测试;不支持单元测试。

    优点:

    1.支持丰富的服务器控件。如:GridView和ListView可以绑定数据,从而减少了大量的代码编写

    2.支持视图状态,每个控件状态以“隐藏域”的形式存在当前表单页面来达到“有状态”,这就是ViewState

    3.基于事件驱动编程, 如:click事件等,aspx页面与cs文件分离,即显示逻辑与处理逻辑分离,便于分工,美工 、编程。不像asp代码混乱

    4.学习成本低

    缺点:

    1.站在项目架构的角度,web form 不是很理想架构模式,尽管可以使用经典的三层架构或者mvp,,但不是最优秀的。

    2.性能 viewstate成功解决了asp问题,但同样引入新的问题,viewstate页面存储势必增加页面大小、降低程序性能

    3.代码可重用性不好;缺少对并行开发支持,因为aspx页面与cs紧密耦合太高; Seo不友好,因为 url指定具体aspx页面;不利于单元测试,因为使用大量事件处理函数

     

    ASP.NET MVC

    Asp.net Mvc架构模式是一种 低耦合、可测试的web应用程序框架,它是基于CLR和成熟的MVC架构构建的。ASP.NET MVC不支持ViewState和服务器控件。

    ASP.NET MVC的优点如下:

    采用MVC架构:分离了关注点,比如开发Controller的时候,只需关注如何处理交互,从request中获得什么数据,业务逻辑交给Model处理,还需要把哪些数据传给页面用于展示,如何展示交给View处理。
    更好的扩展性:ASP.NET MVC框架由一些列独立的组件构成,你可以轻松替换,如路由系统、the View Engine、the controller factory或者其它框架的组件。
    更好的可测性:关注点的分离另外一个好处就是更好的可测性。
    能够完全控制输出的HTML。
    强大的路由功能

    优点:

    1.架构降低了程序间的耦合性,M V C,分层,目标明确

    2.性能 不支持viewstate,完成html,已于结合jquery使用,提供程序性能

    3.支持并行开发,可扩展性好,继承asp.net 特性:表单验证、缓存、会话等。

    缺点:

    没有viewstate和基于事件的编程,上手慢,学习成本高。

    使用场景

    1. 快速开发------>web form

    2. 单元测试、性能-------->mvc

    3. 大量使用 js、jquery ------> mvc

    4. 代码重用性------->mvc

  • 相关阅读:
    微信开发SDK使用教程--手机微信群聊新增通知服务端
    微信开发SDK使用教程--手机微信联系人信息上传服务端
    微信开发SDK使用教程--手机端接收发送朋友圈任务指令后数据回传服务端
    微信二次开发SDK使用教程--手机端向服务端发送回复朋友圈评论任务反馈服务端
    js 自执行匿名函数(转载)
    js继承中,原型属性的继承探究
    搭建邮件服务器和使用压测工具的总结
    window.onload和window.document.readystate的探究
    读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一
    WPF页面 全球化和本地化
  • 原文地址:https://www.cnblogs.com/yuan-jun/p/6735327.html
Copyright © 2020-2023  润新知