[转载]谈谈J2EE框架Paoding-Rose – 施杨 – 博客园.
很久没有发过文章了,不是俺懒,首先是精力放到了考试和申请上了,从八月到十二月都在忙考试和申请,现在已经都
告一段落了,可以干些别的事了。其实说没时间也都是借口,主要还是技术上没有太值得写的东西,自己没亲自上手用过的,不
想写些没啥质量的水文或者评论文章,非技术的东西又写着没意思,转载某本书的章节或者翻译外文的事,俺也兴趣不大。所以
没东西写就干脆不写。
最近给我的一个产品做技术选型,耍了耍Paoding-Rose(下文简称Rose),其实这个框架早在两年前我就关注到了,
当时是在Infoq上看到的一篇人人网架构师的文章,说开源了人人网的前端框架Rose,只不过那个时候已经被各种J2EE框架整的
麻木了,所以只是下载了,但是一直没用过。当时的兴趣都在动态语言和MacOS上,那会的编译原理和操作系统课也挺牵扯精力
的(后半句是借口)。Rose的Google Code官网下载的包里没有Demo,只有几个jar文件,官网上有Wiki作为使用指南,帮助
开发者使用这个框架。Wiki写的挺全的,勤快点还是可以做出来官方Demo的。这次借这个机会,用Rose做了一个小Demo,一
个简单的雇员管理系统,包含了基本的CRUD、分页、上传、拦截器、Portal,持久层用的Rose自带的Jade,用的最新版本1.01
(其实也不算新,一年半都没更新过了),用的很舒服,开发效率非常高。如果再来个脚本工具自动建个表并生成个CRUD,那效
率就真赶上Rails了。为啥我这里要提Rails,那是因为Rails有个闪亮的特点,叫约定优于配置。(您要非说两个框架的首字母都是R
,我也没意见)。网上关于Rose的文章很少,俺写写填补一下空白吧。先声明一下,俺并没有任职于人人网,只是觉得这个开源框
架中有些设计思路不错,所以记下来。下面会谈谈我在使用Rose的过程中发现的七个明显的优点。
1. 约定优于配置
先说约定优于配置,这个优点是我体会最深的。包路径,类名,类方法名都不需要配置文件声明,只要名称包含特定的关键字和
Annotation就行,只要满足这个条件,其他的命名部分可以随便修改,不需要修改任何配置。如图:
包名和类名:
Annotation声明:
这非常爽,当年用SSH单挑项目的时候,写配置都写的手酸。这里就牵扯到XML和Annotation哪个更好的问题了,总之各有优势,
我会分场合使用。XML的优点是配置独立于代码外,无需编译,结构也更清晰直观,便于管理与修改。例如Ibatis就把SQL都放到xml
里,这样确实非常方便管理。Annotation的优点就是提供一体化解决方案,不涉及XML等第三方技术标准,开发起来比较顺手也很简
中,这样方便管理与修改。Annotation则处理不经常变动的部分,比如一些数据或路径映射关系。
2. 自动绑定
自动绑定也是非常实用的功能,Struts2和Struts比起来,比较明显的地方就是表单的自动绑定,我当时实用struts2的时候,
是必须使用struts2标签和set才能自动绑定表单数据的。Rose则不用这样,没有任何标签限制,可以自由绑定属性,并且直接通过
Annotation传参,不需要set数据。数据持久层的Jade框架也提供属性自动绑定,不需要任何的set,get方法,非常提升开发效率。
3. REST风格
由于Rose基于Spring开发,所以使用了很多Spring MVC的组件,也带来了Spring MVC的REST风格,Rose具备了Spring MVC
的很多优势,为了验证与Spring MVC的异同,我专门做了一个Spring MVC 3.0版本的CRUD操作,用来比较开发效率与实现方法。还
是Rose更为快速,Rose对Spring MVC中的URL映射和页面传值操作都进行了优化,看起来更优雅一些,完全支持REST。
4. Jade极简主义
Jade框架极大的提升了开发效率,DAO接口方法加一句SQL实现数据库操作和赋值,不多说了,上图:
补充一点,当然也是支持整合缓存框架的,即便是有些缓存框架的支持不是特别的好,我觉得自己管理缓存也无所谓,反倒更灵活一些。
自己可以决定保存哪些字段。我倒是不怎么喜欢啥都扔给hibernate管理。
5. Portal技术
这个技术蛮帅的,也是人人网架构师比较自豪的一个java后台原创技术,实现的基本原理就是对于需要许多数据渲染的页面(例如
公共主页)做页面模块切分,比如关注列表一个模块,留言一个模块,最新动态一个模块等等。然后每个模块作为一个window并发从
数据库取数据,然后再重新整合数据,最终呈现给用户。可以设置一个时限,比如几百ms,如果在限定时间内,数据没有拿出来,就不
显示这个模块了,保证用户端的响应速度。这个技术也经过了SJ圣战的洗礼,确实发挥了作用,是一个蛮有意思的设计思路。后台原理
类似scala的并发算法,把数据分块,然后并发计算。前台效果也类似新浪微博使用的页面片段加载技术,为了保证用户的响应速度,先
部分加载页面片段,逐步显示整个页面。Facebook也有一套类似的实现方案。
6. 兼容性
Rose使用过滤器而非Servlet拦截请求,现在大部分框架都在通过过滤器拦截请求,比如Struts2,Spring。这样做的好处就是,
可以方便与其他框架的兼容。也基于这点使Rose有了REST的风格。并且也可以与基于Servlet拦截请求的Struts共存,改造遗留系统。
官方描述人人网的前端框架就是这样移植的。
7. 养成好习惯
首先是灵活的拦截器控制,比如局部拦截器是基于包目录的作用域,这样可以帮助开发者养成良好的权限模块切分习惯。其次是
控制器方法映射支持正则表达式以及直接返回Json和XML格式数据,这样可以帮助开发者更好的命名映射路径与规范输出数据。约定
优于配置也帮助开发者规范的命名包和类。某种程度上Rose收集了最佳实践,引导开发者遵守规范。最后如果框架存在Bug或者兼容性
问题,可以通过修改框架源码解决。
PS:对Rose有兴趣可以访问官网,链接:http://code.google.com/p/paoding-rose/,wiki写的挺全。