Monorail学习笔记
Monorail学习笔记 2008-4-19 huangxu
最近在看Castle的东西,并在项目里尝试了Castle ActiveRecord来做ORM,
通过一些网上的介绍评论和自己的学习,感觉castle是个不错的开源框架,特别是它的IOC容器轻便易用,还有就是MVC框架Monorail~在看了它的一个简易的Demo之后,一下子让我感觉到了这种思想正是我需要的!一个MVC框架,一个模板引擎! 原先一直是做webform,总感觉怪怪的,从刚开始的时候拖控件,到现在更倾向于手写html,甚至在一些项目里基本不用服务器控件,那么多的控件里面,恐怕就一个Repeater是最常用的,也是感觉最好的一个了,它提供的功能我觉得在网站开发里足够了~^^当MVC进入我的意识之后,就一直在想现在的方式太怪了,用webform却不用控件,不用grideview而喜欢用Repeater,这是不是在体现一种倾向,一种思想呢?MVC给出了答案,网站开发需要的东西(企业开发有所区别,另当别论)~
再来说Monorail,最近已经不是一次两次的在意识里强调这东西了,
网上的一些说法:http://www.klesh.cn/tag/MonoRail
晚上在castle的svn上发现了一个目录, Castle.ActiveRecord.Linq (svn地址: https://svn.castleproject.org/svn/castlecontrib/),没错,就是现在很火的Linq~.net3.X的一大亮点~微软意图用它来取代现在其他的一些开源ORM框架, ActiveRecord就是其中之一,据说castle的作者跟微软交涉,在asp.net MVC中保留对mono的实现,他也意识到微软主持的MVC将会对castle带来巨大的威胁,Monorail毕竟是个好东西,没人希望它就这样没落,
具体参见这里http://www.infoq.com/cn/news/2007/11/mr-ms-mvc
Monorail向我展现了Rails的思想~原来有看过一些ROR(Ruby on Rails)的东西,但没有时间多看下去,没有体会到,可惜了.
一直打算要开始学习Monorail,到今天才抽空出来,之前有看一些官方网上的和园子里一些朋友写的Demo,基本上的应用是了解了,打算采用castle推荐的Nvelocity模板引擎,当然其他还有的一些模板,同时asp.net下也有一些开源的模板引擎,如StringTemplate, DiscuzNT好像就是采用这个类似的(最近看了它的源代码,因为要帮朋友要做一些二次开发和插件之类的), Nvelocity和Java里的velocity模板的语法类似,
语法参考http://forum.graffiticms.cn/showtree.aspx?topicid=3&postid=5
基本上这些知道了学习起来就不是问题了,加上有良好的html和js等基础,看看Demo就能直接开始试用了,
整理一些学习资源;
一个简易的Demo入门
http://goodlyts.cnblogs.com/archive/2005/10/19/257542.html
一系列的学习文章
http://www.cnblogs.com/firstyi/archive/2007/10/19/930691.html
http://www.cnblogs.com/Yok/category/106196.html
wiki
http://www.keyusoft.cn/Default.aspx?Page=ioc&AspxAutoDetectCookieSupport=1
官方网
http://www.castleproject.org/monorail/index.html
下面开始Monorail学习
插一个题外话:
在下载下来的一堆DLL里,发现一个Castle.MonoRail.JSONSupport.dll ,JSON?拿Reflector一看,里面有一个JSONHelper类,代码如下
public class JSONHelper : AbstractHelper
{
// Methods
public JSONHelper();
public string ToJSON(object model);
}
有一个ToJSON的方法,现在Ajax那么火,是不是Monorail也提供了一些ajax支持呢,于是再反射一下Castle.MonoRail.Framework.dll,我在Castle.MonoRail.Framework.Helpers下找到了答案,该名称空间下有一个AjaxHelper类,提供了一系列通用的ajax操作,不过我还是倾向于直接使用js来直接进行ajax操作,大量时候Monorail提供的服务方式来实现,反而使得原本好好的MVC分离又变得粘在一起了,虽然不像asp.net ajax那样做~个人看法^^
还是回归正题,开始一步一步实践和了解Monorail
http://www.cnblogs.com/Yok/archive/2005/11/05/269383.html
这篇应该要读读 作为了解Monorail的第一步,用了Monorail,就要和webform说bye了,当然,如果你想用,还是可以的,选择权完全在自己,开源的魅力~呵呵, AspNetViewEngine就是Monorail的一个使用使用传统aspx文件的模板.
先来准备开发环境,去Castle上下载开发包,地址http://www.castleproject.org/castle/download.html,现在的版本到1.0.3 (RC3)了,源代码也一起下载来,抽空学习学习,虽然我不一定能看懂,也可以学学思想,呵呵.
顺便再下个monorail的vs插件,可以智能语法着色~额 仅此而已,看上去舒服点~哈,
http://using.castleproject.org/display/Contrib/Castle+Visual+Studio+Integration
安装好后就可以建立Monorail项目了
然后会提示要使用哪个模板
这里就只选NVelocity了,用它来学习~下面还有个URL routing选项,据说castle原本不重视routing的,而java和ruby社区的对这个很重视,所以后来开始重视了~这个也就是现在我们常见常用的url重写~~Monorail内置的强大routing功能~~先不说这个,后面慢慢学习~
接着这个项目模板会提示你要不要继承IOC之类的,很完整的配置过程提示,引用了一堆的DLL,创建成功后的项目里包含如下的项目
打开web.config可以看到添加的配置: <httpHandlers>
<add verb="*" path="*.castle" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" />
<!-- block direct user access to template files -->
<add verb="*" path="*.vm" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.njs" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.brail" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.brailjs" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.st" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
<httpModules>
<add name="monorail" type="Castle.MonoRail.Framework.EngineContextModule, Castle.MonoRail.Framework" />
</httpModules>
可以看出,Monorail用自己的httpMoudles来接管所有请求,另外,在以前的版本里默认使用的是rails后缀,新版本里默认配置为castle了(当然这个由你自己修改的,设成aspx也行,只要你没有aspx和mono混用就没有问题,这也体现了routing的强大^^),生成的项目里已经包含一个完成的demo,运行起来试用了一下感觉非常不错,没有了postback,感觉如此清爽~
官方文档有很简明的教程,非常易懂.再结合一些国内朋友写的技术文章就能很好的进入Monorail~!
http://www.castleproject.org/monorail/documentation/v1rc2/index.html
接下来我们需要了解一下Monorail的生命周期, NVelocity的语法和action,view,controller,以及一些常用的辅助类Helper,如FormHelper,AjaxHelper等以及Castle.MonoRail.Framework.Controllers基类和派生自它的几个控制类, 总体上看,Monorail实实在在的为我们提供了一整套web开发的框架,非常灵活易用,通过阅读它的源码可以看的出,灵活简单的实现了我们所要的东西 nice~!
继续学习….待续了^^
接下来要了解的笔记:
Monorail生命周期
NVelocity常用语法
传值以及显示方式
Controler层以及action操作
…..