大家可以看看他的flash演示http://rifers.org/,下载example试用一下。给我的感觉是那么的似曾相识,就像我第一次看到ruby on rails网站上面的演示一样。
rife简单来说就像rails一样,是一个包含了各层结构的、简化的开发框架,他包含了web层,IoC容器和持久层开发,等同于 Webwork/Spring/Hibernate的组合。不过rife的好处就是一个完整的框架,以统一的概念和操作方式来整合,并且对于domain model的运用和rails颇有异曲同工之妙。而rife的CRUD也类似于rails,异常简化了持久层开发。
此外,rife自身还包含了很多实用功能,例如异步发送Email,定时执行任务,web services功能,甚至还包含了一个cms框架!
rife从作者描述来看是2001年底开始开发的,此前用perl和PHP开发web项目,曾经自己有过一些框架,这些PHP的框架是rife的原型。rife到现在已经发展很多年了,最近我也是因为webwork2.2集成了rife的continuations子项目才知道rife的,目前 rife还不太知名,不论国内外,google出来的评论都寥寥无几。
rife给我初感觉很惊艳,因为我自己也认为Webwork/Spring/Hibernate组合功能强大确实很强大,但是这么多框架内容太多,整个学习成本颇高,而且每个框架都有自己的哲学,概念并不完全一致,考虑到再整合sitemesh,freemarker等等小框架,这门槛也够高的了。
rails能够这么引人关注,无非就是简化开发,这些特点我从rife身上也看到了。当然,限于Java语言特性,没有办法做到rails那么简化和灵活,但是已经比Webwork/Spring/Hibernate简化得太多了,和rails有得一比了,而且基于Java这种最成熟的语言,也是一大优势。
先说说rife的优点:
1、是一个full-stack的Java框架,所谓full-stack大概指的是集成所需要的所有功能的框架,例如rails也是一个full-stack的框架。因而其学习成本自然比Webwork/Spring/Hibernate要小得多。
2、rife集成了常用的大部分功能,包括了一个组件方式的web框架,IoC支持和持久化框架,此外还有RSS支持,CMF支持,Web Service支持,异步邮件支持,Job schedule等等等等。
3、他有一些扩展的子项目很有意思,例如continuations,CRUD,openlaszlo等等。CRUD框架类似于rails,不需要配置映射,运行期动态生成所有需要的CRUD,continuations就不用多说了,openlaszlo支持输出为laszlo。
总体而言,rife是一个和rails相似度很高的框架。有意思的是,rife作者和rails作者还爆发过争吵,这个可以去search他们各自的blog。大意是这样的:
rails作者David Heinemeier Hansson搞了一个在线todolist网站:
www.tatalist.com
号称只用了600行ruby代码,而rife作者Geert Bevin看了这个网站之后,发现一些很严重的bug,在指出之余,狠狠贬低了一把rails,于是遭到了Hansson的嘲讽和rails爱好者的攻击。
Geert Bevin说写这么个简单的网站竟然用了600行代码,可以想像rails并不像它吹的那么好,于是rails爱好者说,你有本事也自己写一个啊,站着说话不腰疼。Geert Bevin就真的自己写了一个出来,这就是:
http://blablalist.com/
功能和tatlist完全一样。并且把所有代码开源出来,号称用了752行Java代码和100多行XML配置文件。
Hansson看了代码之后,又在自己的blog上面狠狠贬低了一把Geert Bevin的代码和rife框架,最后说Java社区太不诚实了,骗子太多。
针对rails网站的那个15分钟做出来一个simpleblog的视频,Geert Bevin也搞了一个40分钟做出来一个simpleblog的视频,录制的内容更加丰富,所以也比较长,总体来说,两者的开发过程很相似,也都很快捷,但限于语言特性,rife要略微繁复一些。
再说说rife的缺点:
实际上我只是简单的看了几个rife做出来的开源程序和quickstart,可能叙述未必客观。
1、rife的持久层映射不是O/R Mapping,这是我认为最致命的缺陷。rife的映射方式是完全忠实映射table column的方式,没有对象层次图。这种方式在某些情况来说也许很好,降低难度,但是在O/R Mapping如此普及的今天,这样用法多少有点落伍,也让用惯了O/R Mapping的开发人员无法接受。
2、rife的view模板用这样的HTML注释标记来嵌入服务器端逻辑,大量运用这种的HTML注释标记显得非常烦琐,既没有freemarker这样的${}方便,也没有JSP Tag方便。
3、rife虽然有IoC功能,也可以连接Spring,但是显然不那么重视DI这种编程习惯。在作者自己写的bamboo forum里面处处看得到类似程序自己去创建依赖对象的代码,让用惯了IoC的开发人员感觉很不好。
总之,rife确确实实提供了一条快速开发的方式,学习成本也显然比Webwork/Spring/Hibernate要低。不过对于Webwork/Spring/Hibernate掌握非常熟练的开发人员例如我来说,似乎改用rife也不会提供更高的开发效率。
顺便提一句ruby on rails,我觉得大家有些过于被表象吸引。实际上对于逻辑关系比较复杂的项目来说,如果自己对Webwork/Spring/Hibernate掌握熟练,又积累了些加速开发的工具类和模板,其开发速度并不会比rails低。