该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-30
最后修改:2009-12-01
今天上JavaEye看到了nutz框架的新闻:
Nutz1.a.22 发布-Mvc,Ioc 文档完成 http://www.iteye.com/news/11774-nutz 看到新闻评论中提到了nutz、Douyu、Play!, 一时心血来潮就回了一次,回了一次很自然的又想回第二次。。。 正好最近也在看Play!,下面的信息就当是对Play!的一点点小的评价了: treblesoftware 写道 ZHH2009 写道 treblesoftware 写道 caoyangx 写道 和douyu等框架比,优势在哪里?
这么多框架纷纷出炉,最难的就是用户,都是冒着风险使用、都是输不起的项目,如何打消用户的顾虑? 用多余不如用PLAY了。 首先得祝贺一下 zozoh ,希望Nutz能坚持下去越做越好。 再说点别的: 我也初步看了下Nutz,今天还特意去了Nutz的GoogleGroup看了看, Douyu不会跟Nutz竞争,Douyu与Nutz在技术实现上差距太大。 Douyu与Play!框架在目前看来倒是存在竞争关系, Play!框架的源码我大致看了一遍, Play!更像是个胶水框架,颠覆得还不澈底。 Douyu的下一个目标之一就是干掉Play!框架。 呵呵,话说大了吧?DUOYU现在到底是什么样子我们还不知道,另外,PLAY的思想也是不一般的,而且是走的REST的路线。另外,PLAY毕竟一群人在维护,社区也小有规模了。 我没说大话, 我说:"Douyu的下一个目标之一就是干掉Play!框架。" 这不是大话,而是把Play!框架当成一个对手。 当然,我不介意你把"Douyu(斗鱼)"故意写成"DUOYU(多余)", 不过,我是建议你去了解一下斗鱼这类鱼类的特性, 你把两条斗鱼放在一个鱼缸总有一条最后是老大。 我说Douyu与Nutz在技术实现上差距太大也是有根据的, Nutz没有动态编译,Nutz还是建立在Servlet上, 可以这么说,Douyu与Nutz虽然都有MVC,但是完全是两种不同的风格, 所以我说Douyu不会跟Nutz竞争, 如果你喜欢Nutz的风格我会推荐你使用Nutz。(呵呵,毕竟是国产,互相支持一下) 在这个帖子中除了一些具体的实现细节之外已经对Douyu的整个轮廓都描述得 很清楚了,除非你没细看,除非你懒得动手照着那些傻瓜式的步骤一步步跟着做。 Play!框架除去与Douyu共有的动态编译之外,在我看来并没有多少值得我借鉴的思想。 我说Play!框架更像是个胶水框架也是有根据的: 比如: play.test包只是对Junit的简单封装; play.cache包只是提供了一个统一的缓存接口, 你也是使用第三方的缓存产品(EhCache、Memcached); View层的实现也是使用Groovy(groovy.lang、org.codehaus.groovy.control等等); 处理Http请求、响应相关的又是借助mina、asyncweb; 动态编译也用的是eclipse jdt编译器,直接跟eclipse jdt编译器交互的地方只停留在表面, 甚至连导入的包名的方式都跟Tomcat6的jasper差不多一样; 与数据库相关的又是使用传统的JPA(依赖于hibernate); 又是使用javassist来生成一些"魔术"代码; 参数自动绑定甚至还不如现在的Douyu强大。 还有你引以为毫的"走的是REST路线"这样的设计思路, 恰好就是我在设计Douyu之初就决定废弃的思路, 我不想把时间浪费在写routes配置文件上: 你看看Play!框架走REST路线走到哪去了, 我只想写个HelloWorld,REST让我先配个: GET / Application.index GET /hello Application.sayHello 我要来个CRUD,REST让我先: GET / ${type.controllerClass.name.substring(12)}.index GET /${type.controllerName} ${type.controllerClass.name.substring(12)}.list GET /${type.controllerName}/new ${type.controllerClass.name.substring(12)}.blank GET /${type.controllerName}/{<\d+>id} ${type.controllerClass.name.substring(12)}.show GET /${type.controllerName}/{<\d+>id}/{field} ${type.controllerClass.name.substring(12)}.attachment GET /${type.controllerName}/{<\d+>id}/edit ${type.controllerClass.name.substring(12)}.edit POST /${type.controllerName} ${type.controllerClass.name.substring(12)}.create POST /${type.controllerName}/{<\d+>id} ${type.controllerClass.name.substring(12)}.save DELETE /${type.controllerName}/{<\d+>id} ${type.controllerClass.name.substring(12)}.delete #{/crud.types} GET / CRUD.index 光是看到这密密麻麻的字符就让我倒味口(这还只是两个简单的controller)。 不要看到Roy Thomas Fielding差不到10年前发表的REST论文就像是得到了灵丹妙药, 让我去遵循REST风格我还不如好好利用classpath和Java语言的package语法。 整个Play!框架的自有代码也不过180个左右的Java源文件, 算上所有注释和空行也不过2万5千多行代码, Play!框架还开发了两年,还是一群人在维护。 我说这么多并不是在显摆, 而是站在一个纯技术人员的角度来看问题, 看一件新事物不能只看表面,要看到实质。 现在的Douyu并不强迫你非得用Douyu开发新项目, 也不强迫你抛弃SSH,甚至鼓励你去尝试Play!, 现在的Douyu更希望得到那些技术痴迷者赏识。 |
|
返回顶楼 | |
发表时间:2009-12-01
ZHH2009 写道 今天上JavaEye看到了nutz框架的新闻:
Nutz1.a.22 发布-Mvc,Ioc 文档完成 http://www.iteye.com/news/11774-nutz 看到新闻评论中提到了nutz、Douyu、Play!, 一时心血来潮就回了一次,回了一次很自然的又想回第二次。。。 正好最近也在看Play!,下面的信息就当是对Play!的一点点小的评价了: treblesoftware 写道 ZHH2009 写道 treblesoftware 写道 caoyangx 写道 和douyu等框架比,优势在哪里?
这么多框架纷纷出炉,最难的就是用户,都是冒着风险使用、都是输不起的项目,如何打消用户的顾虑? 用多余不如用PLAY了。 首先得祝贺一下 zozoh ,希望Nutz能坚持下去越做越好。 再说点别的: 我也初步看了下Nutz,今天还特意去了Nutz的GoogleGroup看了看, Douyu不会跟Nutz竞争,Douyu与Nutz在技术实现上差距太大。 Douyu与Play!框架在目前看来倒是存在竞争关系, Play!框架的源码我大致看了一遍, Play!更像是个胶水框架,颠覆得还不澈底。 Douyu的下一个目标之一就是干掉Play!框架。 呵呵,话说大了吧?DUOYU现在到底是什么样子我们还不知道,另外,PLAY的思想也是不一般的,而且是走的REST的路线。另外,PLAY毕竟一群人在维护,社区也小有规模了。 我没说大话, 我说:"Douyu的下一个目标之一就是干掉Play!框架。" 这不是大话,而是把Play!框架当成一个对手。 当然,我不介意你把"Douyu(斗鱼)"故意写成"DUOYU(多余)", 不过,我是建议你去了解一下斗鱼这类鱼类的特性, 你把两条斗鱼放在一个鱼缸总有一条最后是老大。 我说Douyu与Nutz在技术实现上差距太大也是有根据的, Nutz没有动态编译,Nutz还是建立在Servlet上, 可以这么说,Douyu与Nutz虽然都有MVC,但是完全是两种不同的风格, 所以我说Douyu不会跟Nutz竞争, 如果你喜欢Nutz的风格我会推荐你使用Nutz。(呵呵,毕竟是国产,互相支持一下) 在这个帖子中除了一些具体的实现细节之外已经对Douyu的整个轮廓都描述得 很清楚了,除非你没细看,除非你懒得动手照着那些傻瓜式的步骤一步步跟着做。 Play!框架除去与Douyu共有的动态编译之外,在我看来并没有多少值得我借鉴的思想。 我说Play!框架更像是个胶水框架也是有根据的: 比如: play.test包只是对Junit的简单封装; play.cache包只是提供了一个统一的缓存接口, 你也是使用第三方的缓存产品(EhCache、Memcached); View层的实现也是使用Groovy(groovy.lang、org.codehaus.groovy.control等等); 处理Http请求、响应相关的又是借助mina、asyncweb; 动态编译也用的是eclipse jdt编译器,直接跟eclipse jdt编译器交互的地方只停留在表面, 甚至连导入的包名的方式都跟Tomcat6的jasper差不多一样; 与数据库相关的又是使用传统的JPA(依赖于hibernate); 又是使用javassist来生成一些"魔术"代码; 参数自动绑定甚至还不如现在的Douyu强大。 还有你引以为毫的"走的是REST路线"这样的设计思路, 恰好就是我在设计Douyu之初就决定废弃的思路, 我不想把时间浪费在写routes配置文件上: 你看看Play!框架走REST路线走到哪去了, 我只想写个HelloWorld,REST让我先配个: GET / Application.index GET /hello Application.sayHello 我要来个CRUD,REST让我先: GET / ${type.controllerClass.name.substring(12)}.index GET /${type.controllerName} ${type.controllerClass.name.substring(12)}.list GET /${type.controllerName}/new ${type.controllerClass.name.substring(12)}.blank GET /${type.controllerName}/{<\d+>id} ${type.controllerClass.name.substring(12)}.show GET /${type.controllerName}/{<\d+>id}/{field} ${type.controllerClass.name.substring(12)}.attachment GET /${type.controllerName}/{<\d+>id}/edit ${type.controllerClass.name.substring(12)}.edit POST /${type.controllerName} ${type.controllerClass.name.substring(12)}.create POST /${type.controllerName}/{<\d+>id} ${type.controllerClass.name.substring(12)}.save DELETE /${type.controllerName}/{<\d+>id} ${type.controllerClass.name.substring(12)}.delete #{/crud.types} GET / CRUD.index 光是看到这密密麻麻的字符就让我倒味口(这还只是两个简单的controller)。 不要看到Roy Thomas Fielding差不到10年前发表的REST论文就像是得到了灵丹妙药, 让我去遵循REST风格我还不如好好利用classpath和Java语言的package语法。 整个Play!框架的自有代码也不过180个左右的Java源文件, 算上所有注释和空行也不过2万5千多行代码, Play!框架还开发了两年,还是一群人在维护。 我说这么多并不是在显摆, 而是站在一个纯技术人员的角度来看问题, 看一件新事物不能只看表面,要看到实质。 现在的Douyu并不强迫你非得用Douyu开发新项目, 也不强迫你抛弃SSH,甚至鼓励你去尝试Play!, 现在的Douyu更希望得到那些技术痴迷者赏识。 我服了,您厉害 果然牛人。 |
|
返回顶楼 | |
发表时间:2009-12-01
最后修改:2009-12-01
冰火特蕾莎 写道 你好厉害呀,由衷地佩服
现在是凌晨1点多,偶很少熬夜的 你的帖子能坚持偶倒现在全部看完(包括80%的回帖) 你的代码,偶会明天带去公司好好研究的 偶会给予你最直接的帮助和支持,例如说帮楼主测试bug之类 而不像好多回帖的人在那里说风凉话打击人 他们那些人就想证明自己厉害,又没有什么实实在在的本事,又没见得对我们有什么贡献,就知道说大道理,对别人做的东西挑三拣四,自己又做不出什么像样的东西来。 javaeye里这种自以为是的人可多了,因为我身边也有这样的人,所以我很清楚他们平时的性格,可烦他们这些人了。所以师兄你有时候大可不必理会 师兄你要记得把尽量详细的文档和例子放到google里去托管啊 偶一定会去好好研究的。 楼主看了小师妹的支持,一定信心倍增、斗志激昂 不过师兄师妹是很危险的关系哦 ps:既然已经脱管到googlecode了,就把源代码上传上去吧 |
|
返回顶楼 | |
发表时间:2009-12-01
动态部分的实现自己写得啊,没用到cglib么。出于什么考虑呢?所有代码自己来? 呵呵
|
|
返回顶楼 | |
发表时间:2009-12-03
支持编译api的服务器,这个算很有创意吗?两年前玩儿的
http://www.wikiwebserver.org/ |
|
返回顶楼 | |
发表时间:2009-12-03
不得不说 佩服的五体投地!
|
|
返回顶楼 | |
发表时间:2009-12-04
@Controller 这个就如同xml一样,只不过是换了种方式。
现在都想要无侵入式的framework,lz的这个"@Controller" 如同协议一样啊! 还是有侵入的。 不知道为什么都那么讨厌用xml做配置? 如果能有个framework,拿来已有的project然后配置下xml就可以放到web server下运行了,那多好啊!(等待那天尽快到来) 有人又说了,还得配置一堆的xml文件啊,头疼!!! 但是如果有个visual tools 来让我们配置xml那就好了! 托托拽拽就搞定配置,那多棒啊! (当然仅仅是指action配置的部分,其他的类似权限,ORM什么的就不算在内的了) 目前本人也再考虑这么个framework如果搞定呢? robbin说要写一篇讨伐servlet的文章,希望能尽快看到 |
|
返回顶楼 | |
发表时间:2009-12-04
C:\99.OLD\Douyu\bin>douyu.bat
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version n umber in .class file at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) |
|
返回顶楼 | |
发表时间:2009-12-04
最后修改:2009-12-04
sohua2000 写道 C:\99.OLD\Douyu\bin>douyu.bat
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version n umber in .class file at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) UnsupportedClassVersionError这个错误是因为Douyu是用JDK1.6编译的, class文件的版本号在JDK1.5中不能识别,所以就会出现这个错误。 换成JDK1.6应该就可以了。 跟这里39楼的问题一样: http://www.iteye.com/news/11305-javac-http-mvc-orm?page=7#comments |
|
返回顶楼 | |
发表时间:2009-12-05
今天刚发现play!一个非常严重的问题,修改了模版文件居然不能立即生效,必须重启play!后才行~~~
|
|
返回顶楼 | |