如果羡慕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写业务类、框架类的那一吨好处>。
2. 八卦:各种动态语言的Java实现
Groovy ,BeanShell,Jython(Python),JRuby(Ruby),Rhino(JavaScript),
Jacl(TCL),Bistro(SmallTalk),Kawa(Lisp/Schema)
3.哪种动态语言?
Jython总是若断若续,气若游丝的样子,而且现在都才移植到Jython2.1,比Python2.4 慢了几拍,很信不过。
JRuby呢? Dion Almaer在JRuby0.8.2发布时说:"The day JRuby gets up to Jython levels, and then C Ruby levels, will be a great day.",字面上JRuby比Jython还要不靠谱。
Ruby还有一个不好是暂时没有好的IDE(连那个收费的ruby-ide都好弱),如果没有好的IDE,可以抵消掉大部分语言本身的优势,真不能想像Ruby On Rails是用怎么个UltraEdit级的编辑器写出来的。
Groovy的弱势是1.0正式版还没有发行,用户社区还不大。
因为现在选的是Java框架下嵌入哪种动态语言作为业务类。所以Python和Ruby的用户社群和大量的已有项目作用不是很大。而Groovy比起两位舶来品,
1.作为私生子,嵌入性理所当然是最好的,两者的关系暧昧得不得了。
2.另一个天然优势是能兼容Java的语法,把Java代码copy到Groovy几乎不作什么修改(only不支持throws定义语句和Inner Class),团队的学习曲线平滑。
3.因为不是移植项目,语言升级时没有时间差,不用看移植人的脸色。
so,我会选Groovy,等它的正式版出来之后。