MonoRail是什么?  
起源
MonoRail是一个.NET的MVC web开发框架, 原名Castle On Rails, 是CastleProject的一个子项目. 作者hammett在使用过Ruby On Rails后, 觉得非常棒, 他希望在享受ror的开发模式的同时能使用大量现有的资源, 于是就用.NET写出了一个Castle On Rails. 后来ror那边有人抗议说, 把项目名字叫做xxx On Rails是侵权, On Rails不只是它字面上"快捷"的意思, 而是代表了他们的软件开发哲学, 是专有名词... 于是hammett把项目改名成MonoRail了. 现在可下载的版本是2.0。
MonoRail的核心是Action Pack在.NET上的实现. 这种方式高效, 直观而且易于测试. MonoRail的开发模式和传统的webform有很大区别, webform属于PageController模式, 每一个页面对应一个Controller, 通常情况下, 这个Controller就是根据url相对应的.aspx文件分析出来产生的类. 如果不清楚aspx的底细, 请看这里. System.WebUI.Page实现了IHttpHandler, 每个aspx相关的类各自处理自己的http请求, 经一些逻辑处理后(通常代码在aspx的Codebind类, 也就是aspx的父类), 输出自己的视图。 
简介
而MonoRail是FrontController模式, 由Castle.MonoRail.Framework.MonoRailHttpHandler接管所有请求, 然后根据请求的url创建相应的controller, controller再调用相应的action, 最后调用模板引擎输出内容. 默认情况下, 一个url的结构是Controller/action. 例如, http://localhost/monorailSample/Home/index.rails 对应类 HomeController的Index()方法.
MonoRail实现的模板引擎有3个:
AspNetViewEngine
用传统的.aspx文件做模板, 可以照常使用aspx语法和服务器控件, 但是由于Webform的生命周期和MonoRail完全不同, 有时候会让人觉得别扭, 有部分特性也受到了限制.
NVelocityViewEngine
用NVelocity做模板引擎, 需要学习VTL语法, 但是使用很简单, 特别是很多java程序员已经熟悉velocity. 简单的语法也强迫程序员把逻辑和界面很好的分离开来, 方便跟美工配合.
BrailViewEngine
基于Boo的模板引擎, Boo是一种语法类似python的.NET语言, 据MonoRail的参考说, Brail引擎是功能最强, 性能最好的选择, 但Boo是一种陌生的语言, 这成了Brail引擎应用的最大障碍.
综合各种因素, MonoRail推荐使用的模板引擎是NVelocity, 但说不定哪天Brail会赶上来...
没有Server Control的世界
五花八门的Server Control是似乎是aspnet最吸引人, 最有优势的地方. Webform确实是一个非常棒的设计. 复杂的HTML和js在服务端被包装成简单易用, 有清晰层次结构的对象, 比起asp时代界面的编写方便多了. 当初想用monorail只是出于方便和美工配合的考虑, 并且担心是否有些工作又回到asp时代的原始状态. 但事实上, 我用monorail花了一个星期做了一个小项目后, 发现代码是多么的简洁和清爽, 代码量比传统的Webform开发少多了. 总结一下monorail效率如此之高的原因:
1. SmartDispatcherController提供了querystring或form到action参数的绑定, 支持string, 各种数值类型, 数组以及HttpPostedFile. 例如, EditUser.rails?id=1, 1将会绑定到EditUser(int id)方法的id参数. 参数还可以绑定到一个对象, 例如一个form里有name属性和User类各个字段名对应的input, 当他们post到SaveUser.rails时, SaveUser([DataBind]User user)中的user将会自动被创建和赋值. 一个业务逻辑比较简单的MIS, 或许相当一部分的代码就是这样无聊的:
paramName.Value = txtName.Text ;
paramBirthday.Value = txtBirthday.Text.Length > 0 ? DateTime.Parse(txtBirthday.Text) : DBNull.Value ;
...
但是有了自动绑定机制后, 无聊的代码就消失了, 这也显得TextBox, DropdownList之类的简单server control没有什么价值了.
2. 可以定义Filter, 在action之前和/或之后执行, 在Filter里可以获得action相关的上下文, 如果是在action之前执行还可以通过返回false终止action的执行. Filter可以用于权限验证, 日志, 生成公有的动态内容等方面, 提高了逻辑代码的复用.
3. 模板可以嵌套, 或者在Controller里定义LayoutAttribute使模板被嵌套, 并且引入了概念有点类似user control的ViewComponent, 提高了界面的复用.
4. 逻辑和界面完全分离, 便于维护和测试.
大部分流行的aspnet控件, 都有开源的js实现的替代品, 例如 HTML编辑器可以用FCKeditor, 日历可以用JsCalendar, 还有TreeView, Menu之类的, 在sfnet都应该找得到比较好的项目. 至于datagrid, 用nvelocity的foreach循环足够了. 其实webform只是入门容易,要精通的话它的成本是比精通xhtml + css + javascript的成本高得多的。
文章转载自 百度百科

转载于:https://www.cnblogs.com/FayJack/archive/2011/01/10/1932346.html

了解.net框架 MonoRail相关推荐

  1. Monorail学习笔记

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

  2. Nodejs系列课程,从入门到进阶帮你打通全栈

    本课程由社区博主:Scott 编写 本文通过提供给大家学习的方法,以及我个人录制的一系列视频,帮助你更快更好的学习 Nodejs,了解前后端的 HTTP 知识,以及配置和使用阿里云 ECS 来部署你的 ...

  3. MonoRail学习笔记二:框架代码下载

    为了更好的学习MonoRail,我准备下载MonoRail的源代码看看. 先从http://www.castleproject.org/castle/download.html 下了一个源代码,结果编 ...

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

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

  5. 一起谈.NET技术,专访微软MVP衣明志:走进ASP.NET MVC 2框架开发

    日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭 ...

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

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

  7. Castle.MVC框架介绍

    Castle.MVC目前还在Castle的Sandbox中,只是在源代码管理中有,还没有向外发布版本,这里介绍多时Web的MVC,和Castle的MonoRail相比较,这个MVC可以Asp.Net的 ...

  8. MonoRail学习笔记十一:页面控件的填充和验证

    Mono提供很多组件可以方便的处理页面:可以自动将后台的值填充到页面,可以自动进行Javascript验证,可以自动在后台验证等.这些功能都是比较实用的,可以减少很多开发 FormHelper是用来对 ...

  9. .NET的轻量级IOC框架芮双随笔

    面向对象的设计的重用性一直是他的一个重要特性,为了有效定义这一特性,又引申出面向对象设计的几个原则:高内聚.低耦合.功能单一.优先使用聚合.面向接口编程等.依赖这些原则和前人的经验,又发展出形形色色的 ...

最新文章

  1. 配置Cesium编译环境
  2. supervisord+supervisorclusterctl+supervisord-monit
  3. 计算机网络运输层习题5-13
  4. 网易智慧企业2020年度见面会4大亮点抢先看!
  5. 活动目录组策略统一管理桌面
  6. 计算机电路基础答案,计算机电路基础模拟试卷答案(B)
  7. 语音识别准确率终于提升了 以后可以随时和机器人聊天
  8. java的基本数据类型有八种
  9. python怎么下载网易云歌曲_python 下载网易云歌曲(能在线听都可以)
  10. 个人创建微信公众号步骤
  11. nas 和 远程文件夹同步_我应该如何使用Qsync来同步我计算机和NAS上的档案?
  12. 什么是运行时应用程序自我保护(RASP)Runtime Application Self-Protection
  13. 苹果手机如何设置喜欢的铃声?想给自己的iphone换个别具特色的铃声吗?
  14. 讯飞 AIUI 集成
  15. html [JS]随机密码生成[运维工具]
  16. 什么是android刷机包,刷机包是什么?ROM刷机包是什么意思?
  17. java swing 创建一个简单的QQ界面
  18. 【Linux系统编程】守护进程、线程
  19. 11.Moveit 末端坐标系姿态表示形式——四元数
  20. 【锐捷无线】无线网络优化

热门文章

  1. Trac系列(2):Trac的使用
  2. Firefox 禁止中国用户!!
  3. 第五章 Java字符串总结
  4. java知识点博客园_Java知识点总结1
  5. 虚拟机中安装linux系统步骤
  6. 虚拟运营商APN、SPN参数、Sim卡名称
  7. php2-3v690,php网页版文件浏览器
  8. .基金从业资格考试信息
  9. 小工具-Greenplum数据库中AO表和非AO表获取
  10. 即使Windows DVD Maker不存在,如何在Windows 8上创建DVD-DVDStyler