`

Playing Play!系列之一:Play框架的暴力美学

    博客分类:
  • Java
阅读更多

     

     作为Java领域最Railsful的框架,Play有如一股清新之风,以不破不立之势,一扫以往JavaEE开发臃肿庞杂之惑,迅速建立起了独特的简单之美。Play框架架构于标准的Java体系之上,开发起来却与Rails框架非常神似;其框架本身的核心代码只有不到27千行(含注释),可谓小巧精致,非常极简主义,却包含了从Web框架到对象持久、从动态编译到单元测试、从缓存到异步作业框架、从插件到模块扩展体系等众多功能,是一个全栈框架——“All you need to create a cool web application;它吸收并重用了大量已有Java类库,却依然能够独树一帜、标新立异。

 

如果说当年的Spring框架,是以“JavaEE without EJB”打出了响亮的口号,将传说中的EJB组件技术和昂贵的EJB容器轰下神坛;那么现在的Play框架,则类似“JavaWeb without EE”,甚至不需要Servlet,它更彻底地宣称,自己是一个代替企业级Java框架栈的、清爽的平台。

 

Play框架一开始就宣布,这是一个“无痛的Java框架”,关注于开发人员的生产力,针对RESTful架构,是敏捷软件开发的绝佳搭档:

1、没有了“编译-打包-部署”,直接“修改-保存-刷新”;

2、非常详细的编译错误提示

3、简单的无状态MVC架构

4、HTTP直接映射到代码调用

5、高效的模板引擎

6、强化的JPA

7、测试驱动开发

8、全栈式应用框架

 

我把以上几点称为其八大“美学”特征,但是,在试用了Play框架,并作初步的分析之后,我却又逐渐发现其如下的八大“暴力”特征:

1、自带嵌入式的Java编译器,不再需要构建工具编译、打包代码;

2、自带嵌入式的HTTP服务器,不再需要打包部署到Servlet容器;

3、自带在嵌入式服务器中运行的测试框架,所有的测试类,必须以测试模式启动服务器方式执行

4、严格按MVC组织应用代码,各层组件类必须继承基类,没有“优雅”的接口实现,也不用依赖注入;

5、对渲染响应结果的跳转控制,居然使用“异常”抛出机制

6、控制器类的Action方法通通是静态的,直接调用静态方法即为Action链重定向;

7、将模型类的字段声明为public,再通过框架编译成私有字段和公共属性访问方法,访问模型对象的属性时也不使用get/set

8、打破Java的封闭类定义,可以为Java类库中的类定义增强方法,并在响应模板中嵌入的增强对象上调用。

 

综合起来,统称为Play框架的“暴力美学”比较合适。这样一个矛盾的结合体,究竟会是怎样一个框架?它又是如何做到的呢?我很疑惑,也很期待,希望能够从框架的源码入手,通过抽丝剥茧,层层解读,找到答案。

 

Play框架的命名,正是为了一反传统JavaEE开发的臃肿,代表着一种轻松、玩乐、写意的态度,因此为不失其初衷,我想也给接下来的几篇文章取一个轻松的名字,就叫Playing Play!系列吧,应该很合适。

 

      liuu9@163.com

      liuu.iteye.com

10
3
分享到:
评论
12 楼 lucumu 2010-04-30  
ixu 写道
超级潜水员 写道
呵,play不是抄rails,是抄python的django.
基本上是django翻版.

从J2EE走出来,了解一下其它语言的框架,就感觉不到有那么多惊奇了.


多谢兄台提醒,我一直是搞Java的,了解过Rails,但对Python和Django确实不熟,
Play框架的作者也在FAQ中说:“It uses Java but tries to push all the good things from the frameworks based on scripting languages like Ruby On Rails, Django, Pylons, Symfony, Grails, Cake PHP, etc“



楼主,文章写的很好,很畅快。喜欢“暴力美学”几个词,刚刚看到这个框架,才知道,Java还有另外一种玩法。
playframework非常爽。的确跟django有几分神似。
http://www.jsxnc.com 我用它在业余时间玩玩的。有机会可以交流交流。

11 楼 yvfish 2010-04-07  
diggywang 写道
ixu 写道
yvfish 写道
why not grails?

我对使用纯Java开发Web应用更感兴趣

一起用GWT吧!

可惜GWT现在是商业授权
10 楼 chen_jp 2010-03-25  
很有意思,呵呵
9 楼 kongxx 2010-03-05  
关注一下!
8 楼 diggywang 2010-02-25  
ixu 写道
yvfish 写道
why not grails?

我对使用纯Java开发Web应用更感兴趣

一起用GWT吧!
7 楼 ixu 2010-02-24  
yvfish 写道
why not grails?

我对使用纯Java开发Web应用更感兴趣
6 楼 yvfish 2010-02-23  
why not grails?
5 楼 Arden 2010-02-22  
ixu 写道
超级潜水员 写道
呵,play不是抄rails,是抄python的django.
基本上是django翻版.

从J2EE走出来,了解一下其它语言的框架,就感觉不到有那么多惊奇了.


多谢兄台提醒,我一直是搞Java的,了解过Rails,但对Python和Django确实不熟,
Play框架的作者也在FAQ中说:“It uses Java but tries to push all the good things from the frameworks based on scripting languages like Ruby On Rails, Django, Pylons, Symfony, Grails, Cake PHP, etc“

我觉得更有点象抄python的web2py框架~~
4 楼 ixu 2010-02-22  
超级潜水员 写道
呵,play不是抄rails,是抄python的django.
基本上是django翻版.

从J2EE走出来,了解一下其它语言的框架,就感觉不到有那么多惊奇了.


多谢兄台提醒,我一直是搞Java的,了解过Rails,但对Python和Django确实不熟,
Play框架的作者也在FAQ中说:“It uses Java but tries to push all the good things from the frameworks based on scripting languages like Ruby On Rails, Django, Pylons, Symfony, Grails, Cake PHP, etc“
3 楼 超级潜水员 2010-02-21  
呵,play不是抄rails,是抄python的django.
基本上是django翻版.

从J2EE走出来,了解一下其它语言的框架,就感觉不到有那么多惊奇了.
2 楼 Arden 2010-02-21  
我觉得play!很爽!!
1 楼 taowen 2010-02-20  
改Classloader的东西。。。

相关推荐

Global site tag (gtag.js) - Google Analytics