颠覆臃肿的JavaEE开发框架(bloated Enterprise Java stacks)的Play框架1.0发布,它在很多方面有其革命性的独创,也有助于我们了解现在JavaEE框架的不足。
Play框架吸收PHP RUBY动态语言的特点,采取即时源码编写,即时激活,框架本身融合了编译器和服务器。取代了 compile-package-deploy 过程,提高产品的开发效率。Play框架甚至提供在线编辑器,在线修改BUG后即时投入应用。
其架构有如下特点:
1. Simple stateless MVC architecture 简单的无状态MVC架构
Play框架认为一边是数据库保存状态,一边是浏览器也可以保存状态,那么还要中间件MVC保存Session状态干什么呢?
HttpSession有很多问题,虽然可以处理针对某个用户的状态,但是万一用户中途离开怎么办,HttpSession对资源消耗,以及在可伸缩性方面是有问题的。
Play框架秉承share nothing架构思想,不再象黑客那样破解原本自然正常Http模型,然后强行植入状态,无状态架构可以并行同时输出多个页面,提高Web性能。
2 。HTTP-to-code mapping
众所周知的Servlet API 和Struts其实是扭曲的,使用奇怪的API将Http协议隐藏起来,Play框架认为一个Web应用框架应该给用完整的 直接的对Http调用和使用,这其实就是RESTFul精神。
这样 URI是play framework的主要概念。
对一个Java对象的调用,不是写Java语句,而是使用URI就可以,如下:
GET /clients/{id} 实际是调用Clients对象的show方法。
3.Efficient templating engine
Play框架认为JSP & Expression Language模板机制很好,但是需要太多配置,吸收其模板设计,剔除配置。对于一个有无Email的显示页面,使用JSP大概需要以下很多语句实现:
|
而是要Play框架则可以如下:
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !
4.JPA on steroids
Play框架采取JPA作为持久化,并且使其更方便使用。
|
个人意见:这段代码倒是直接将持久层和表现层直接耦合在一起,没看到Domain Model了。看来DDD需要普及到每个角落不容易啊。
5.Integrated Cache support, with easy use of the distributed memcached system if needed.
整合了缓存支持,可以使用memcached作为分布式缓存。
6.融入了OpenID 这样单点登录SSO技术。
7.提出Application modularization,可以重用各种组件,包括CSS Javascript
个人点评:总体来说,Play框架是一个与Struts2 JSF Tapestry竞争的框架,但是又整合了持久层和服务器,它的强项在其前半部,也就是展现层,作为一个打包整合的框架,没有强大的Domain层,是非常令人失望的。
Play框架网站:
http://www.playframework.org/
[该贴被banq于2009-10-21 10:23修改过]