接触到ROR还是因为工作中用到了一款非常不错的系统redmine,一时兴起查阅了一些相关文档,对ROR这个开源框架感觉还好!
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
),
同时提供了
Cookie
和
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
,对控制软件版本,敏捷开发,数据库模型的演变等提供了非常方便的支持。