开发者社区> 文艺小青年> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

谈谈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等第三方技术标准,开发起来比较顺手也很简

洁,不用担心XML文件过多。JPA就是把数据映射都用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或者兼容性

问题,可以通过修改框架源码解决。    

本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2011/12/29/Paoding-Rose-Analysis.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
AcWing 21. 斐波那契数列
AcWing 21. 斐波那契数列
4 0
EB 级系统空中换引擎:阿里调度执行框架如何全面升级?
作为阿里巴巴核心大数据底座——伏羲调度和分布式执行系统,支撑着阿里集团内部以及阿里云上大数据平台绝大部分的大数据计算需求,在其上运行的 MaxCompute(ODPS) 以及 PAI 等多种计算引擎,每天为用户进行海量的数据运算。为了支撑计算平台下个 10 年的发展,伏羲团队启动了 DAG 2.0 项目,从代码和功能方面实现完全的升级换代,支持更多 DAG 执行过程中的动态性及计算模式。本文将分享 DAG 2.0 核心架构及整体设计,以及与上层各个计算引擎的对接,较长,同学们可收藏后再看。(文末免费下载《领军行业大数据及 AI 实战》)
684 0
补习系列(20)-大话 WebSocket 与 "尬聊"的实现
[TOC] 一、聊聊 WebSocket 从HTML5技术流行至今,WebSocket已经有非常广泛的应用: 在线游戏,提供实时的操作交互体验 社交平台,与好友实时的私信对话 新闻动态,获得感兴趣的主题信息推送 ... 这些场景,都需要服务器能主动实时的给浏览器或客户端推送消息,注意关键词是主动,还有实时!而在HTML5一统江湖之前,由于HTTP在推送场景下的"薄弱",我们需要借助一些复杂或者非标准的手段来实现。
1561 0
OSS重磅推出OSS Select——使用SQL选取文件的内容
OSS重磅推出OSS Select功能,可以直接使用简单的SQL语句,从OSS的文件中选取所需要的内容
26506 0
强大的Grafana worldping插件
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
2038 0
[LeetCode] Reverse Words in a String
Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". Clarification: 1.What constitutes a word? A sequence of non
1029 0
x3d
Unity3D 5中增加WebGL 播放插件
http://www.csdn.net/article/2014-03-18/2818822-Unity-5-game-engine 其实我是搞3d的,这篇文章里所有的术语看了都有很强的亲切感。   Unity的多平台功能仍是最具价值的功能之一,Unity Technologies与Mozilla合作推出用于Unity的WebGL以及asm.js支持。
1033 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载