`
duker
  • 浏览: 105618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

我对"play" 框架的看法

阅读更多

这段时间,发现 "play" 这个名字多次出现,看介绍说是"纯java ,动态编译,运行速度快,开发效率高 ..."(详情参见"Play! 一个Rails-like的Java框架 ","Play with Play! - 框架概要 ")终于按奈不住挑逗,于是抽了一个晚上到它网站上逛了一圈.终于识破了它那掩藏在虚假漂亮外衣下的本来面目,play 漂亮的外衣就不说了,已经有很多溢美之词.说说它的问题.

controller 的问题

controller 被设计成为类中的静态方法.这使得controller丧失了oo语言平台的种种优点,换句话说--直接自宫.过度使用静态方法有什么问题?这方面有很多资料.例如("The Essence of OOP using Java: Static Members ","Static Methods are Death to Testability ").

 

在"play" 的宣传册 "Five cool things you can do with Play! " 中有一条:

"Bind an HTTP parameter to a Java method parameter"

这句是废话,在控制器中访问经过转换的http参数是一项最基本的要求,例如struts2 直接转换成为controller 的 property
play 的控制器被设计为静态方法,所以http参数就只能以方法参数传入,没有这一点,这个框架根本不能用,而不是什么"cool things"

 

 

组件模型的问题

组织代码只有两种选择, controller, model.

controller:
如果想用controller? 考虑下如何用类的静态方法组织代码---这不是变成过程语言了吗?你真的很想用过程语言来组织你的业务逻辑?

 

model: 
play 的 model很明显是充血模型,关于贫血模型和充血模型哪一种更好,已经浪费了很多口水,这里就不在赘述.这里的问题是play 根本不提供第三种组织代码的手段(service),那么一旦出现某项业务逻辑操作多个领域对象的情况,这些代码应该放在哪里?

 

另外有一项限制更绝:
"Does not keep any object into the Java heap for multiple requests"
这个要求把play的应用从第三方的类库中隔离开来.意味着你使用其它类库之前要考虑下是不是满足这条要求(估计多数情况下不会满足)再好好想想,你真的能保证永远不再用第三方类库了吗?

 

事务管理的问题

事务,对企业应用的重要性就不必多说了.spring 能够如此popular的一个重要原因也正是它把强悍的事务管理以简单的pojo的方式提供给应用开发者.其它web 框架无有不提供和spring 集成的手段, play 为什么漠视spring? 还是由于 "Does not keep any object into the Java heap for multiple requests"

 

非j2ee stack

难以在主流市场上获得认可。

 

综上所述: "play" 在设计上有重大缺陷,现阶段只是个玩具(正如项目的名称一样)

分享到:
评论
14 楼 johnhuaping 2011-10-26  
container 写道
人家本来就没有想搞你所谓的企业应用。为什么非得拿企业级开发那一套去衡量play呢?

实在没觉着在一个互联网网站上,controller中全部是static有什么不好。莫非你还多态出花来才能实现你的简单的业务?你是搞淘宝的吗?

组织代码只有两种选择, controller, model.这不够用?你还要用啥?用个EJB、Spring去搞个网站?

为啥非得与Spring集成?ROR也没有Spring,php也没有Spring,不是搞互联网开发挺方便的吗?

比如说,如果用play开发个类javaeye网站,需要那么复杂的"企业级"功能吗?人家没逼迫你用在企业级中吧?完全就是不同的定位啊。

13 楼 xinguoyao 2011-08-23  
满纸荒唐言
12 楼 shoru 2010-07-17  
"Bind an HTTP parameter to a Java method parameter"

你对这句话的理解还不够。
11 楼 ixu 2010-01-27  
lkwangyong 写道
Does not keep any object into the Java heap for multiple requests
应该是不要把任何对象放在Java堆上。
这个框架是个全栈的


再说清楚一点,应该是指不要在多次请求的过程中,通过堆来保存状态。
即无共享架构,没有session,状态只保存在客户端和数据库。
这个跟后台的事务管理没有半点关系,跟是否使用其他第三方库也没什么关系。

另,container同学的激动是有道理的:)
10 楼 lkwangyong 2009-12-22  
Does not keep any object into the Java heap for multiple requests
应该是不要把任何对象放在Java堆上。
这个框架是个全栈的
9 楼 pipilu 2009-11-22  
dch1287 写道
"Does not keep any object into the Java heap for multiple requests"

大哥 您能不能先解释一下 这句话的字面意思 然后再看看您理解的意思

我怎么觉得和你说的压根不是一回事儿呢


楼主说火星语,能听懂才怪。
8 楼 pipilu 2009-11-22  
见了楼主,知道什么叫无知者无畏了。
楼主,如果你非要认为自己是地球人,那我情愿去当火星人。

1、继承也是不被提倡的,建议用接口来替代。但是看看开源的框架去,很多实现或应用,都用了继承(且不说“模板模式”)。这些道理,没有绝对的。action里的方法不是静态的,你用它什么“oo语言平台的种种优点”了???你负责去实例化action了?用静态方法就过程化语言了?

2、service的代码不知道放哪,那只能说你弱的够级别了。

3、“另外有一项限制更绝”——你到底在说啥?回去把Servlet Specification好好学学去。不能用第三方类库??行了,你是搞软件的,偶是卖糕的。

7 楼 dch1287 2009-10-23  
"Does not keep any object into the Java heap for multiple requests"

大哥 您能不能先解释一下 这句话的字面意思 然后再看看您理解的意思

我怎么觉得和你说的压根不是一回事儿呢
6 楼 container 2009-01-02  
duker 写道

container 同学不要激动..我只是把我看到的一些play的问题提出来..当然,哪一种技术解决方案都不是完美的,在选择的时候要根据自己的实际情况做判断..如果你认为play很适合自己的需要,那就使用它.


呵呵,不好意思,激动了一些。因为感觉java程序员很容易一开口就是企业级应用。

公司开发企业级应用,我也不会选择play。play的定位不是企业级开发的。
5 楼 container 2009-01-02  
JohnnyJian 写道

container 写道人家本来就没有想搞你所谓的企业应用。为什么非得拿企业级开发那一套去衡量play呢?实在没觉着在一个互联网网站上,controller中全部是static有什么不好。莫非你还多态出花来才能实现你的简单的业务?你是搞淘宝的吗?组织代码只有两种选择, controller, model.这不够用?你还要用啥?用个EJB、Spring去搞个网站?为啥非得与Spring集成?ROR也没有Spring,php也没有Spring,不是搞互联网开发挺方便的吗?比如说,如果用play开发个类javaeye网站,需要那么复杂的"企业级"功能吗?人家没逼迫你用在企业级中吧?完全就是不同的定位啊。所以简单的web应用就不需要做单元测试了?


谁说play!不能做单元测试了??
4 楼 JohnnyJian 2009-01-01  
container 写道

人家本来就没有想搞你所谓的企业应用。为什么非得拿企业级开发那一套去衡量play呢?实在没觉着在一个互联网网站上,controller中全部是static有什么不好。莫非你还多态出花来才能实现你的简单的业务?你是搞淘宝的吗?组织代码只有两种选择, controller, model.这不够用?你还要用啥?用个EJB、Spring去搞个网站?为啥非得与Spring集成?ROR也没有Spring,php也没有Spring,不是搞互联网开发挺方便的吗?比如说,如果用play开发个类javaeye网站,需要那么复杂的"企业级"功能吗?人家没逼迫你用在企业级中吧?完全就是不同的定位啊。


所以简单的web应用就不需要做单元测试了?
3 楼 duker 2008-12-31  
container 同学不要激动..
我只是把我看到的一些play的问题提出来..
当然,哪一种技术解决方案都不是完美的,在选择的时候要根据自己的实际情况做判断..
如果你认为play很适合自己的需要,那就使用它.
2 楼 container 2008-12-31  
play只是为java快速开发提供一种特别的方案而已,定位是类ROR或者php,根本不是你说的企业级...
1 楼 container 2008-12-31  
人家本来就没有想搞你所谓的企业应用。为什么非得拿企业级开发那一套去衡量play呢?

实在没觉着在一个互联网网站上,controller中全部是static有什么不好。莫非你还多态出花来才能实现你的简单的业务?你是搞淘宝的吗?

组织代码只有两种选择, controller, model.这不够用?你还要用啥?用个EJB、Spring去搞个网站?

为啥非得与Spring集成?ROR也没有Spring,php也没有Spring,不是搞互联网开发挺方便的吗?

比如说,如果用play开发个类javaeye网站,需要那么复杂的"企业级"功能吗?人家没逼迫你用在企业级中吧?完全就是不同的定位啊。

相关推荐

    play框架学习手册

    Play框架是一款基于Java的全栈Web开发框架,它的设计理念是帮助开发者使用最小的配置和编码来构建高性能、可扩展的Web应用。本手册将详细介绍Play框架的核心概念、安装配置、项目结构、基本使用和高级特性。 **一....

    Play框架的一个demo

    Play框架是一个开源的Java和Scala应用开发框架,它遵循模型-视图-控制器(MVC)架构模式。Play强调简洁的代码和实时反馈,使得开发过程更为高效。...这将对理解Play框架的工作原理及其在实际项目中的应用大有裨益。

    Play框架中文文档.pdf

    Play框架中文文档.pdf

    JAVA PLAY框架入门学习手册

    JAVA PLAY框架入门学习手册 Java PLAY框架是基于Java语言的Web应用程序框架,旨在提高Web应用程序的开发效率和可维护性。下面是Java PLAY框架的入门学习手册,涵盖了框架的主要概念、目录结构、请求生命周期、HTTP...

    play框架手册完整版本

    Play框架是基于Java和Scala的开源Web应用框架,遵循MVC(Model-View-Controller)设计模式,旨在简化Web开发过程。它强调代码即路由、轻量级、快速开发和可测试性,使得开发者能够更加专注于业务逻辑,而不是底层...

    play框架 2.1 api

    play框架 2.1 api

    scala PLAY 框架 sbt仓库

    Scala Play框架是一款基于Java和Scala的开源Web应用框架,它以简洁、高效和模块化著称,被广泛用于构建现代的、反应式的Web服务。在Play框架中,sbt(Simple Build Tool)是默认的构建工具,它允许开发者管理项目...

    play框架的简单增删改查

    Play框架是Java领域的一款轻量级、开源的Web应用框架,它基于MVC(Model-View-Controller)架构模式,提供了简洁的API和强大的工具,使得开发者能够快速地构建高效、可测试的Web应用程序。本项目是针对初学者设计的...

    play框架搭建环境步骤

    play框架的搭建步骤,是我自己学习的总结

    play框架jar包

    Play框架是一款基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提供高效、简洁且快乐的开发体验。这个资源包含了一系列用于搭建Play框架的jar包,这些jar包是开发Play应用程序所...

    play 框架使用ajax的例子

    Play框架是基于Java和Scala的开源Web应用框架,遵循MVC(模型-视图-控制器)设计模式。它强调简洁的代码结构和开发效率,同时提供了对AJAX的强大支持,使得开发者可以轻松创建交互式的、响应式的Web应用程序。在本...

    play 框架学习

    Play框架是一种基于Java的轻量级、高性能的Web应用程序开发框架,特别注重开发效率和敏捷开发。它采用了无状态的MVC架构,支持RESTful设计原则,使得HTTP请求可以直接映射到代码,避免了通过Servlet等中间层的复杂性...

    play框架+一个helloworld例子

    此资源是整个play框架外加一个helloworld小例子,下载解压到文件夹中可以直接进行play框架开发。

    play framework 框架手册 word 版

    《Play Framework 框架手册》是一份深入介绍Play框架的文档,主要涵盖了从基础概念到高级特性的全面内容,适合初学者和经验丰富的开发者参考。以下是对手册中部分核心知识点的详细阐述: 1. **MVC应用程序模型**:...

    任务管理系统(基于play框架)

    Play框架以其模块化结构、异步I/O模型和对RESTful架构的支持而备受青睐。 1. **用户注册功能**: 用户注册是任务管理系统的基础,允许个人创建账户以进行任务管理。这一功能通常包括输入用户名、密码、电子邮件等...

    play框架 JPA注解

    Play Framework 是一个流行的Java web应用框架,它提供了一种简洁、高效的开发模式。在Play框架中,Java Persistence API (JPA) 是用于处理对象关系映射(ORM)的一个组件,使得开发者可以方便地将Java对象与数据库...

Global site tag (gtag.js) - Google Analytics