如果羡慕Ruby On Rails可以使用动态语言来编码,但又舍不得Spring、Hibernate这些Javaer深以为傲的框架,那么有一种折中的方案:仍然使用Spring+Hibernate框架,而用Groovy/Jython/JRuby来编写Controller类、Service类、DAO类,然后把它们编译成普通的Java Class文件。BuggyBean的blog里用Jython示范了这种方案。
1.why 动态语言?
现在的动态语言都已经很面向对象,和传统的用来写写外围脚本(测试,安装)的script语言已经不同,而且Groovy,Jython,JRuby写成的类除了动态载入外,都可以编译成静态的Java Class文件,所以已能很好的承担J2EE应用里业务类的角色了。
动态语言有什么好处呢,不用考虑变量类型算是一个,对于框架性的应用,类型的动态绑定非常实用,可以简省很多设计模式。
另外如Groovy强大的String类也是很吸引我的地方,支持多行,可以把EL嵌入在String里,而不是用丑陋的scanf。
2.哪种动态语言?
Jython总是若断若续,气若游丝的样子,而且现在都只移植到Jython2.1,比Python慢了几拍,不是很信得过。
而Ruby唯一不好是暂时没有好的IDE(连那个收费的ruby-ide都好弱),如果没有好的IDE,可以抵消掉大部分语言本身的优势,真不能想像Ruby On Rails是用怎么个UltraEdit级的编辑器写出来的。
Groovy比起两位舶来品,有一个天然优势是和Java的语法非常相似,把Java代码copy到Groovy几乎不作什么改,团队的学习曲线比较低。
但它的IDEA插件同样没有完成,Eclipse的插件只有语法高亮,JSR-1版的离正式版还有段距离,而且JSR-2开发进度延后得比较厉害。
动态语言本身当然各有各的好,但现在选的是Java框架下嵌入哪种动态语言作为业务类。所以Python和Ruby强大的用户社群和已有项目不会有加分,而Groovy平滑的学习曲线和基本上一样的语法就显得比较吸引,毕竟团队里的成员大多不希望做一个项目里要同时handle两种语法差异较大的语言。
so,我会选Groovy,等它的正式版和IDEA5的插件出来之后。