wsky's blog,Record my technical life

just coding

导航

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

        

晚上在castlesvn上发现了一个目录, 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好像就是采用这个类似的(最近看了它的源代码,因为要帮朋友要做一些二次开发和插件之类的), NvelocityJava里的velocity模板的语法类似,

语法参考http://forum.graffiticms.cn/showtree.aspx?topicid=3&postid=5

 

基本上这些知道了学习起来就不是问题了,加上有良好的htmljs等基础,看看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,就要和webformbye,当然,如果你想用,还是可以的,选择权完全在自己,开源的魅力~呵呵, AspNetViewEngine就是Monorail的一个使用使用传统aspx文件的模板.

 

      先来准备开发环境,Castle上下载开发包,地址http://www.castleproject.org/castle/download.html,现在的版本到1.0.3 (RC3),源代码也一起下载来,抽空学习学习,虽然我不一定能看懂,也可以学学思想,呵呵.

      顺便再下个monorailvs插件,可以智能语法着色~ 仅此而已,看上去舒服点~,

http://using.castleproject.org/display/Contrib/Castle+Visual+Studio+Integration


   1.bmp
   安装好后就可以建立
Monorail项目了


   2.bmp
   然后会提示要使用哪个模板


   3.bmp
   这里就只选
NVelocity,用它来学习~下面还有个URL routing选项,据说castle原本不重视routing,javaruby社区的对这个很重视,所以后来开始重视了~这个也就是现在我们常见常用的url重写~~Monorail内置的强大routing功能~~先不说这个,后面慢慢学习~

接着这个项目模板会提示你要不要继承IOC之类的,很完整的配置过程提示,引用了一堆的DLL,创建成功后的项目里包含如下的项目

4.bmp
打开
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也行,只要你没有aspxmono混用就没有问题,这也体现了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操作

         …..

        

        

 

 

最后要感谢园子的几位朋友 Yok, 永春, 流腥鱼,以及TerryLee,最先从各位老师的文章了解到了castle,了解到Monorail~

 

多多指正,学习中的新手^^

 

 

posted on 2008-04-19 23:24  wsky  阅读(708)  评论(2编辑  收藏  举报