Saturday, March 10, 2007

Google轻量级"依赖注入"框架Guice 1.0开源发布

  上周,Google将其内部使用的轻量级“依赖注入”(Dependency Injection)框架Guice 1.0版本在Google Code Project上开源发布了。

  Guice(发音同juice,即果汁)是针对Java 5以及之后的版本来开发的,大量应用了基于注解(annotations)和泛型(generics)编程特性,使得代码的开发量和重复工作大大减少。

  初看了一下Guice,觉得值得研究关注一下的地方有:支持任意输入参数的构造器、类成员和方法的依赖注入;灵活的自定义注入范围(scope)和循环依赖;与Spring,Struts的集成支持;面向方面编程(AOP)的类方法拦截器支持等等。

  先抛开Guice不谈,从我的平时实践经历上来说,Java 5之后带来的特性,诸如泛型、枚举型、新for循环、静态常量import等都用的非常多了,但是annotations这一块用得倒真的不是很多,仅仅限于一些标准的使用,而没有从自定义annotations的角度来尝试一下如何提高开发和配置效率呢。究其原因,也可能是我觉得很多东西大家把development guidelines定下来后,各自遵守应用就行了,但随着重构进行和持续变化,的确有些时候重复地做了一些大同小异的事情,从而导致有些小小的混乱了。因此,接下来倒也是可以考虑来借鉴着做点这方面的小尝试吧。

  再来说说“依赖注入”,记得很早之前Martin Fowler就写过一篇模式分析的文章,题为“Inversion of Control Containers and the Dependency Injection pattern”,推荐一看。万变不离其宗,这一系列相关的模式以及框架,大都还是围绕着“灵活松耦合”这个核心展开的。这个在我们的日常开发设计过程中的确也是反复地被实践应用着,但大都是手工实现的,基本没有采用那些所谓的轻量级框架(这有主观的,也有客观的原因)。诚然,这样手工的反复实现和改动的确会带来开发效率和清晰性的欠缺,但从另外一方面来讲,其运行时执行和调试的效率也无疑又是比较令人满意的了。最后,还是归结到一个“折衷”的问题,即一个框架是否“适用”或者说有无必要研究借鉴并重新“定制”实现要取决于实际情况。

William Cui 崔伟毅

Labels: ,

Wednesday, February 21, 2007

从Thinking in Java到Thinking in Flex

  上月底, 著名的Thinking in Java和Thinking in C++两书的作者Bruce Eckel在Artima上语破惊人地写了一篇名为“Hybridizing Java”的长文(Hybridize是杂交的意思,可以理解为正在进行中的Java杂交化)。无独有偶,在随后的一系列Adobe在线研讨会还有广告宣传中都看到了Bruce的身影,最著名的一句标语就是:“I've been Thinking in Java, now I'm Thinking in Flex”。
  在文中,他用“Web is a Mess”开篇论及了当红的Ajax和以GWT为代表的开发工具和框架在解决HTML、CSS还有Javascript等在跨平台/浏览器一致性方面所起的作用,同时提出一个可以让大家思考的问题:我们必须持续不断地花如此高昂的代价把这条方向不一定正确的路走下去吗?诚然,不是说不可能走不下去,但这些互联网早期既有的技术标准(HTML、CSS还有Javascript等)在当初设计制定时是否考虑到如今的人们想要在其之上进行的“创造性”发挥呢?

  他还谈到了为什么Java没有赶上时代之潮流,在Web前台取得兵家必争之地,而更多地是在Web后台服务器端应用开发中延续着Web革命的火种。

  之后,Bruce将目光投向了基于Flash的解决方案:
The only obvious solution is Flash. Flash has always been all about cross-platform multimedia experiences and user interfaces. People are very familiar and comfortable with Flash, and it is installed on almost all machines in the world. It’s trusted, stable and reliable.
  最后,他对Flex还有Adobe不久即将露面的Apollo在Web和Desktop用户界面开发潜力和未来发展前景寄予了厚望。

  看来,大家也是时候关注一下Flash RIA了,让我们翘首以待吧!


William Cui 崔伟毅

Labels: ,