2010年1月6日星期三

Java Play! 学习体验

Java平台上有大量优秀的资源,但是其基础Web框架标准J2EE非常沉重复杂,严重 影响了小团队使用Java技术实现快速开发。而 Java Play!( http://www.playframework.org/ ) 有力提升了Java开发的敏捷能力。

这几天我一直在下班时间学习这个框架。总的来说,它非常的易学易懂,而且架构分层很接近ROR的模型(或者,对于我,很接近Web2py)。其架构设计非常清晰易懂。另外,使用中我体会到的几点优点如下:

- 在线热开发,不必考虑“Web-app”之类的部署问题,可以在命令行方便的建立和启动项目站点进行开发,源码保存后自动热编译更新,这一点比 Web2py好多了。
- 框架驱动模式合理,几乎不用操心接口继承、注入、AOP什么的,也不需要写XML 配置文件,最多为特定功能的结构进行标记。
- 文档翔实,质量高。这是在任何一个Python框架中都没有达到的水准,包括 Django和ZOPE。甚至就算ROR我觉得与之文档相比也有相当差距。仅 Tutorial一项就比web2py所有文档加一起的质和量都好很多了。
- 结构透明,无魔术。可以方便的使用任何开发工具进行开发,不依赖于某个 IDE,我是用的emacs。
- route 配置非常简单,纯文本,每个配置一行完成
- 模板功能丰富,特别是URL生成,非常智能。
- 有丰富完整和强大的测试支持,从基础的Java UnitTest到前端页面的“硒”测试,还允许用YAML编写测试数据环境,注入到测试或开发环境使用。
- 提供了CRUD、图片验证码等功能支持。

说了这么多好的,再说说我认为不足的:
- 限于Java语言,它再怎么智能、动态,也是有限的,Java语法不允许的,它不会变魔术。比如SQLAlchemy的动态记录类型,这个在Play的 JPA里,如果不反射的的 话,应该是没办法的。
- 模板功能很丰富,但是标记稍有些烦琐,这个不算大问题。
- 结构比J2EE/EJB简化了,自然也就有简化的代价,估计再像传统方式那样集合大 团队作战不太容易,例如模型层想做多层的代理转发是不行的。但是另一方面说, 肯定也比过去节省人力,开发效率高。
- 还没找到有没有XMLRPC等服务的提供方式,如果真的没有,就需要自己弄一个嵌进去了。

Play 一个有趣的地方是大量使用动态语言技术进行混合开发,框架里有不少 Python(jython?)和groovy代码。

在以下两个方面,Play可能会对有贡献:

一些Java成熟的技术和资源,如Flash、商业应用模型,可以通过这个平台引入 一些高性能要求的应用,目前测试结果Play好过Django等框架。

Play是我至今遇到最易学易用的Java框架,首次将Java Web开发的门槛降到了 ROR、Django、Web2py这个层次。以前我们难以引入的一些Java资源,现在有希望了。