`

Rails框架纵览:

阅读更多
Rails框架纵览:

学习Rails框架也好几个月了,不过这段时间忙着考研复试,忘了不少了,总结一下,找回点感觉,好做毕业设计。

Ruby on Rails的两大箴言:约定优于配置(Convetion over configuration)和DRY(Don’t

repeated yourself)造就了Rails 的极高的开发效率,使Rails框架迅速风靡世界,现在可以说是红的发紫。

  Ruby on Rails框架,是一个使web应用的开发、部署和维护变得更容易的框架,Rails框架非常适合进行敏捷开发和基于测试驱动开发,因为整个框架的设计,就将测试放在了很高的位置,你每生成一个Mode , Contorller他都会自动在test文件夹下生成对应的测试类,并且Rails提供了一整套类似于JUnit的单元测试工具,同时提供了对web测试的功能(甚至可以深入到Html的标签进行测试),它提供的测试设施非常全面和易用,它可以让对数据库操作部分的各个测试用例彼此隔离,提供Mock对象(request , response),使得web程序测试就象普通程序测试一样简单。

  Rails的ORM做的相当的好用,虽然比hiberate的功能要弱一些,但使用Ruby语言的动态性动态的生成查询函数的功能用起来比起Hibernate爽多了,让你真正的脱离了对sql的低级操作(hibernate引入HQL,宣称具有面向对象的查询语句,感觉有自欺欺人的感觉,我感觉存在的理由只是作为一个中介,方便根据不同的sql方言生成sql而已),而同时你也拥有直接操作sql的强大功能来实用复杂的场合,例如多表连接,只查询部分字段等。它让Mode继承Active::Record ,使得的领域模型是胀血型的,更加面向对象,适合领域驱动的设计方法建模(使用Hibernate的 j2ee,一般是贫血型的,只有属性,没有行为,有违面向对象的理念。实现充血型的模型相当困难,例如使用AOP什么的)。Rails只需要使用has_many,

belong_to,has_one,has_and_belongs_to_many类似声明的方法,就可以轻松指定表间关联。同时提供了Acts As List ,Acts As Tree, 以及单表继承等高级功能。值得一提的是Rails的属性是虚的,它直接绑定于表中的属性,这样当你修改数据库设计(如增加字段),同时会反映到Mode中。ActiveRecord的功能不止于此,其提供的效验(validation)功能相当强大,你可以重载ActiveRecord的validate方法,也可以使用效验的辅助方法(validates_format_of,validate_uniqueness_of,validate_acceptance_of, validates_length_of等),使用起来非常方便。同时ActiveRecord还提供了回调方法(before_destory,before_save,after_destory,after_save等)和Observer,不需要java使用Filter和AOP的复杂配置,便可以获得其强大的功能。

  ActionController作为控制器,其功能就是根据请求调用Action,在Action中执行业务方法,并转向适当的视图。ActionController提供了一种称为请求路由(Routing Requests)的方法来匹配URL请求,从而找到正确的Controller和action,类似j2ee使用xml配置,但请求路由它只需要提供一套(或自己定制)路由匹配策略就可以处理所有的请求,比j2ee针对每一个Action请求需要一个mapping简洁的多,同时也不失其强大的功能。ActionController也有类似于jsp的render(类似jsp 的forward)和redirect_to(类似于jsp的redirect),同时提供了Coookie和Session,其使用非常方便。并且使用了flash方便的在一个或多个请求中传递信息。ActionController提供了过滤器(Filters)和效验(verification)。Filter提供了类似Spring框架AOP同样强大的功能(前置/后置/环绕过滤器),你可以动态的增强一个方法,使用Filter我们可以轻松实现身份认证,日志等具有一个横切面性质的业务功能。Rails提供了页面缓存,action缓存,片段缓存,大大减少了重复操作导致的服务器资源和时间的耗费,

提高了性能。同时提供了缓存实效策略和清扫器以及基于时间的缓存实效策略,避免了手工管理缓存的困难。同时Rails还不甘ActionController现有的功能和机制,在Rails1.2提供了REST(Representions State Tranfer), REST技术,使得只需要指名控制器和相应的资源,而不需要指名Action就可以进行相应的操作。REST是基于htpp协议的一些动词GET,POST,DELETE,PUT来执行相应的操作的,它使得URLs简洁清晰,可以根据不同的请求给予不同的响应(响应可以是.html,.xml,.js等),代码相对更少,使用一个面向CRUD的控制器以及清晰的应用设计。他在controller中使用response_to, 连接和表单使用新的help method以及在routes.rb里生成新的路由等新的特色。

  ActiveView提供了两种模板rxml和rhtml模版,由于ruby语言的动态性,使得ruby语言嵌入rhtml中来控制页面逻辑以及输出具有原生的优势,不用像jsp需要提供表达式语言(EL)。使用Helper方法可以避免在模版视图中嵌入大量的代码(特别是业务代码),从而实现代码和表现的分离。ActiveView提供了大量的辅助方法来提供连接,生成表单,同时提供了分页的功能。ActiveView使用布局模版、局部页面模版,以及组件,使得大量的页面和局部页面可以被共享和重用,其J2EE框架至今还尚未有以实现易于重用模版的和先进的理念(特别是渲染技术,Structs的Title ,JSF的渲染还不错,但与之相比还相差甚远),局部模版技术与rails实现的Ajax技术搭配起来可以实现很酷的页面动态效果,同时对局部模版可以进行缓存来改善web性能。模版可以方面的访问Controller的实例变量和类变量,以及辅助方法,这一切都是Controller与页面模版之间的交互非常容易,同时页面之间可以传递参数也大大地增加页面之间的交互性。

同时Rails提供的对Ajax完好的集成,rails对ajax的封装使你只需要使用ruby代码就可以产生web2.0的很酷的效果,避免使用javascript这个难以调试的东东,同时也避免了不少低级的操作,rails在背后替你做了一切。

最后值得一提的是rails1.2提供的Migration,对控制软件版本,敏捷开发,数据库模型的演变等提供了非常方便的支持。(本人乃rails新手,如有不当之处在所难免)

分享到:
评论
1 楼 shuxiang 2009-06-01  

相关推荐

Global site tag (gtag.js) - Google Analytics