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
,对控制软件版本,敏捷开发,数据库模型的演变等提供了非常方便的支持。