本文所指WebForm,特指Microsoft在.NET平台上倡导的类似WinForm的组件式开发方式,所有Controller特指MonoRail里的Controller非MVC里的Controller。

  WebForm的开发理念源自于WinForm,基于控件的拖放及后台代码编写的开发方式的而且确是很方便快捷的开发方法,WinForm的成功很好地说明了这一点。整个WebForm的核心就是控件,以封装手,重用为目的而存在的控件使得WebForm极为容易上手。得力于WebForm方便快捷的开发方式,.NET在企业开发领域取得了巨大成功。

  HTTP协议是无状态,WebForm为了要像WinForm那样保持控件的状态,不得不依赖于ViewState/Postback这些机制。总的来说,WebForm是以控件为核心,依赖于ViewState、Postback机制最终构成的。脱离了它们,WebForm则不能称之为WebForm

  然而,控件在带来方便的同时,其生成的HTML代码也难以维护;ViewState带来状态维护的方便,同时也造成了性能的损耗;在Postback机制中有一点让我很困惑的是:很多时候我们要在Page_Load判断是否第一次请求然后执行一些初始化(如绑定的动作)。为何Microsoft不在Page上加多一个Initialize之类的事件来代替现有的在Page_Load中判断IsPostback。这样做一来会比较优雅,二来也更加像WinForm了。

  再来看看aspx和cs,它们是WebForm表现代码分离的形式,是的,仅仅只是表现代码的分离而已。aspx上面的控件依赖于后台cs的控制,而后台的cs则依赖于aspx的存在。分离是物理上的,逻辑上它们还是紧密地结合在一起的,没有了谁都不行。专业点来说,它们是耦合在一起的。

  在企业开发领域,由于软件将会在企业内部有限范围内使用,通常则不会对界面有太高要求,甚至大多数时候都是开发人员直接拼出来的界面。因此,WebForm生成的代码再恶心,再难以维护,aspx/cs耦合再严重也没什么影响。ViewState/Posback带来的性能损耗在使用人数有限的企业应用中也并不突出。所以用WebForm来代替一部份企业CS(Client/Server)应用好处是很明显的,比如说,系统更新时只需更新服务器,而不用每次分发客户端。

  可是,毕竟不是所有使用.NET的人都在做企业开发,当用WebForm来做网站开发,我感觉就像牛刀杀鸡一般。在网站开发的世界里,我们的客人,通常会对界面会有所要求,甚至于有时候会要求生成的HTML代码要符合W3C标准……所以,对HTML代码的控制变得重要起来;另一方面,作为放在internet上供众人浏览的网站,ViewState/Posback带来的性能开销变得不容忽视起来;aspx/cs耦合使得无法将它们作为设计师和程序员职责分离的承载体(特别是当程序员在页面上扔一些SqlDataSource之类的控件)。

  牛刀不是不能杀鸡,但很多人毕竟不习惯用牛刀来杀鸡。MVP(Model-View-Presenter)才是真正切合网站开发实际情况的开发方式。虽然WebForm比MonoRail要强大,很多,但它毕竟不适合我们做网站开发的。

  MonoRail就是适合网站开发的一套MVP开发框架。与WebForm的开发理念不同,它着重于职责的分离。当Controller(MonoRail中的Presenter称为Controller)和View被切割隔离开来时,设计师和程序员和谐地分工合作也成为了可能(世事无绝对)。MVP的理念中,没有控件,没有Posback,当然也没有ViewState,客户端和服务器间的交流回归到了原始的Form/QueryString/Cookie的方式(难道这样不是更自然吗?),借由此,设计师重新找回了对HTML代码的控制权。程序员在Controller里专注于数据的处理,设计师(我通常认为设计师应该具有一定的html知识)通过学习简单的模板控制代码后,模板文件则会成为他的势力范围。

  Contoller和View之间会通过松散的PropertyBag进行沟通,而不像WebForm的asp/cs那样紧密(cs会对aspx上的控件在在引用,或aspx上的控件会绑定cs产生的数据)。因此,View对呈现的逻辑有绝对的控制权,而单纯的View上的修改调整也不会对Controller产生影响。即使设计师把View全删光了,程序也不会出错,那么,你就再也不必为设计师的过失而背黑锅了。而本来应该由设计师完成的修改也不需要程序员来做了。

  无论是WebForm也好,MonoRail也好,最大的区别还是它们的理念。其实,只要你有好的意识,使用WebForm一样也可以把界面和控制分离得很好;相反,在MonoRail的Controller里一样可以生成HTML代码再传给View……

追加两个分别用WebForm和MonoRail实现购物车功能的Demo

Shopping Cart (WebForm)

Shopping Cart (MonoRail)

转载于:https://www.cnblogs.com/Klesh/archive/2007/10/13/webform-and-monorail.html

WebForm与MonoRail相关推荐

  1. MonoRail和WebForm,谁是瑞士军刀

    从学习成本上来看,无疑WebForm的初期学习成本是相当的低.对于完全的新手,控件拖放然后编写后台代码应该是相当容易理解和接受的方式:对于从WinForm上转过来的开发人员,这种开发方式则早已成为他们 ...

  2. NClay框架MVC应用入门

    这一章节主要讲述NClay框架的MVC在实际应用的入门,开发人员可以通过该案例程序可以看到区别于传统WebForm和MonoRail的MVC全新开发模式实现:在NClay中并不需要象传统MVC组件那样 ...

  3. MonoRail学习笔记一:一个小例子

    随着微软放出消息,准备发布MVC的框架,各种议论纷至沓来. 以前用java.jsp对它的MVC结构.集中控制印象特别深刻,自从用了.NET后,虽然webform的控件很好用,总感觉有点怪怪的 在网上搜 ...

  4. 基于WebForm的Front Controller模式框架

    经过一段时间努力终于把WebForm下的Front Contoller模式初型完成:虽然框架和MonoRail是基于同一种模式,但有最大的区别就是该框架的Controller是依赖于接口完全脱离Asp ...

  5. MonoRail - 简介 [基础知识篇]

    MonoRail - 简介 起源 MonoRail是一个.NET的MVC web开发框架, 原名Castle On Rails, 是CastleProject的一个子项目. 作者hammett在使用过 ...

  6. MonoRail - 简介

    起源 MonoRail是一个.NET的MVC web开发框架, 原名Castle On Rails, 是CastleProject的一个子项目. 作者hammett在使用过Ruby On Rails后 ...

  7. 为什么要使用MonoRail?

    可能最近很多人都听说了微软要推出MVC的框架,关注MonoRail的人也多了起来. 想学习MonoRail的人应该也不少,但是埋头拉车,更要抬头看路,我们为什么要学习MonoRail呢? 我自己到现在 ...

  8. 学习MonoRail MVC

    从留言簿开始,学习MonoRail MVC(一)   (来自:http://fuyun.cnblogs.com/) 关注MVC开发Web应用程序是看到<一个.NET的MVC Web框架>这 ...

  9. Monorail学习笔记

    Monorail学习笔记  2008-4-19 huangxu <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:o ...

最新文章

  1. wdcp系统升级mysql5.7.11
  2. SqlServer 行转列
  3. Caffe学习系列(13):数据可视化环境(python接口)配置
  4. 如何制作快速加载的HTML页面
  5. Go map[int64]int64 写入 redis 占用多少内存
  6. mysql数据库的体系结构包括什么组件_MySQL数据库的体系结构
  7. Ubuntu 查看默认软件安装位置
  8. java 操作db2_java操作DB2,增删改查
  9. android 自动化测试_Android自动化测试探索之代码覆盖率统计
  10. 王腾疑似喜提Redmi Note10系列新机:最高搭载1亿像素主摄
  11. JSP断点续传多线程链接下载
  12. 自定义ImageButton,实现快进快退功能
  13. Miller_Rabin测试法
  14. 关于layui的日期和时间组件LayData时间选择器使用时一闪而过
  15. jsp在线编辑器|PHP在线编辑器|asp在线编辑器|.net在线编辑器|asp.net在线编辑器|在线Word编辑器
  16. RLS实现求解最小二乘确定性正则方程
  17. python进行主成分分析_python 主成分分析
  18. 加拿大移民-雇主担保移民政策解读
  19. 关于cookie的详细讲解
  20. 不知道如何压缩PDF?教你3个压缩PDF文件方法

热门文章

  1. .Net4.0 任务(Task)
  2. sqlDbx连接oracle64位
  3. 篮球比赛计时计分系统
  4. 网络拓扑测绘之城域网拓扑
  5. linux 扫描wifi
  6. c语言工程合并报告,C语言《数据结构》实验报告】链表的合并
  7. java抢购_java redis 实现抢购秒杀
  8. 【Python入门】人生苦短,我用Python
  9. React全家桶(技术栈) redux 代码
  10. 遇到问题--python-- pandas--常见问题积累