MonoRail - 简介 [基础知识篇]

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了. 现在可下载的版本是0.4beta, svn上的版本已经是RC1了

简介

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是似乎是asp.net最吸引人, 最有优势的地方. 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. 逻辑和界面完全分离, 便于维护和测试.

大部分流行的asp.net控件, 都有开源的js实现的替代品, 例如HTML编辑器可以用FCKeditor, 日历可以用JsCalendar, 还有TreeView, Menu之类的, 在sf.net都应该找得到比较好的项目. 至于datagrid, 用nvelocity的foreach循环足够了. 其实webform只是入门容易,要精通的话它的成本是比精通xhtml + css + javascript的成本高得多的。我也用过两年webform,但是我仍然不了解它的生命周期中大部分的步骤。。。。
应用案例

越来越多了:) castle官方论坛的monorail有专门板块用来展示。

转载自:http://www.cnblogs.com/yok/archive/2005/11/05/269383.html

转载于:https://www.cnblogs.com/xyzla/articles/2728527.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结对编程(黄金点游戏)

我扮演的角色是驾驶员 一、结对伙伴 领航员:赵峻 作业地址见我的博客。 二、代码地址 https://coding.net/u/k2048/p/huangjindian/git/blob/master/main.c 三、总结 1、个人总结 本次作业我扮演驾驶员,赵峻扮演领航员,我负责算法实现以及代码…

qtgl 鼠标平移 c++_罗技真爱粉的MX Master 3无线鼠标体验

​这是一篇关于罗技MX Master3的晒单,顺带也翻出我的库存清洁整理一下吧。在决定购买一款新鼠标的时候,我的第一目标其实是MX Vertical垂直鼠标,不过MX Vertical目前优势只在外形上,在MX系列中明显属于低配,自由滚轮、…

下载网页中的图片到本地

简单的一个下载如下 : string url "http://avatar.csdn.net/A/2/6/2_yefengzhixia.jpg";string filepath "D:\\pic.jpg";WebClient mywebclient new WebClient();mywebclient.DownloadFile(url, filepath);MessageBox.Show("OK");…

nacos linux启动_微服务系列之Nacos配置中心之一:Nacos介绍与安装

一、Nacos 介绍Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。英文全称 Dynamic Naming and Configuration Service,Na 为 Naming/NameServer 即注册中心,co 为 Configuration 即配置中心,Servic…

演练:在组件设计器中创建 Windows 服务应用程序

http://msdn.microsoft.com/zh-cn/library/zt39148a(vvs.80).aspx 演练:在组件设计器中创建 Windows 服务应用程序 .NET Framework 2.0其他版本5(共 5)对本文的评价是有帮助 - 评价此主题注意 Visual Studio 标准版中不提供“Windows 服务”模…

绝对震撼 7款HTML5动画应用及源码

除非特别声明,PHP100新闻均为原创或投稿报道,转载请注明作者及原文链接 原文地址: http://www.php100.com/html/it/mobile/2014/0702/7030.html [导读] 关于HTML5动画,我们已经分享太多了,当然也有很多利用纯CSS3实现的…

maven打包指定main函数

2019独角兽企业重金招聘Python工程师标准>>> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> …

简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏

本文实例为大家分享了java版贪吃蛇小游戏的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下项目结构新建一个JFrame窗口,作为程序入口public class GameStart{public static void main(String[] args) {JFrame jFrame new JFrame();jFrame.setBounds(100,100,900,720…

java切入式编程显示屏_C语言嵌入式系统编程修炼之四:屏幕操作

C语言嵌入式系统编程修炼之四:屏幕操作作者:宋宝华 更新日期:2005-07-22汉字处理现在要解决的问题是&#xff0c;嵌入式系统中经常要使用的并非是完整的汉字库&#xff0c;往往只是需要提供数量有限的汉字供必要的显示功能。例如&#xff0c;一个微波炉的LCD上没有必要提供显…

算法之矩阵计算斐波那契数列

算法之矩阵计算斐波那契数列 本节内容 斐波那契介绍普通方式求解斐波那契矩阵概念矩阵求幂矩阵求解斐波那契1.斐波那契介绍 斐波那契数列有关十分明显的特点&#xff0c;那是&#xff1a;前面相邻两项之和&#xff0c;构成了后一项。即f(n)f(n-1)f(n-2),f(0)0,f(1)f(2)1,推导下…

SeekBar和RatingBar

1. SeekBar的主要属性 2. OnSeekBarChangeListener 3. RatingBar的主要属性 4. OnRatingBarChangeListener 1. SeekBar的主要属性 2. OnSeekBarChangeListener 1 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools&qu…

用“Web的思想”做PC客户端

一直在想&#xff0c;用HTML搭建前端页面这么方便&#xff0c;而且效果这么炫&#xff0c;为什么在PC端的软件要如此麻烦呢&#xff1f;就连C#也是&#xff0c;更何况C了。 尽管C有DirectUI这样优秀的图形库&#xff0c;但是开发起来仍然非常吃力。C#的WPF虽然工具链完善&#…

Java并发中常用同步工具类

为什么80%的码农都做不了架构师&#xff1f;>>> 同步工具类可以是任何一个对象&#xff0c;只要它根据其自身的状态来协调线程控制流。阻塞队列&#xff08;BlockingQueue&#xff09;可以作为同步工具类&#xff0c;其他类型的同步工具类还包括信号量&#xff08;…

RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播

RTMP协议发送H.264编码及AAC编码的音视频&#xff0c;实现摄像头直播 摘要: RTMP协议发送H.264编码及AAC编码的音视频&#xff0c;实现摄像头直播  RTMP&#xff08;Real Time Messaging Protocol&#xff09;是专门用来传输音视频数据的流媒体协议&#xff0c;最初由Macrome…

jenkins 部署文档

Jenkins是一个非常出色的持续集成服务器&#xff0c;本文主要介绍在CentOS系统中Jenkins的基本安装配置方法&#xff0c;供参考。一. 软件包&#xff1a;1. 下载apache-maven-2.2.1-bin.tarhttp://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.2.1-bin.tar.gz…

牛人,多看看他们写的东西

计算机大师 Donald E. Knuth&#xff08;高德纳&#xff09; 算法大师&#xff0c;我最崇拜的计算机科学家&#xff0c;没有之一&#xff01;不认识高爷爷的人别说自己是学计算机的。《The Art of Computer Programming》绝对是计算机科学的圣经。对高爷爷的崇敬&#xff0c;对…

20121108团队博客(苏若)

PS&#xff1a;这本是属于昨晚的帖子&#xff0c;对不住忠仔。现在补上。 忠仔&#xff0c;终于交给了我一个实实在在的任务&#xff0c;很是欣喜&#xff0c;也很是忐忑&#xff0c;生怕自己不能及时完成任务。 好了&#xff0c;废话不多说&#xff0c;步入正题。 接下任务【画…

textedit怎么插入数据_还在手动插入Excel交叉空白行?这个小技巧10秒搞定

导读&#xff1a;前几天有同学在后台提问&#xff0c;怎么快速在Excel中隔行插入一行或者多行空白行&#xff0c;其实在早期我们分享的小视频中有利用过类似的小技巧来制作工资条&#xff0c;今天我们用它来插入空白行。文/ 芒种学院指北针Hello&#xff0c;大家好&#xff0c;…

rocketmq 启动_016【windows版Rocketmq】小白学习Rocketmq单机部署

以前都是听说MQ&#xff0c;或者在别人搭建好的基础上去使用&#xff0c;没有自己动手搭建过&#xff0c;就没有更深入去理解。现在机会来啦.啦啦.啦啦啦......引用自己的CSDN文章href"https://blog.csdn.net/chenzhong2010/article/details/106699590或点击左下角“阅读原…

WPF WebBrowser 加载 html ,出现安全警告, 运行 脚本和 activeX 控件,

对于你的问题&#xff0c;只需要在你的HTML首行添加如下代码即可隐藏安全提示条&#xff1a; <!-- saved from url(0014)about:internet --> 还有一个可选方案是使用Winform的WebBrowser控件&#xff0c;不需要更改HTML代码&#xff0c;也不会出现安全提示&#xff0c;需…