2009年4月17日星期五

Why is Spring So Important?

Why is Spring So Important?
     Java EE 平台主要希望解决复杂的分布式的应用程序的开发,在中间件厂商与开源社区的大力支持下,传统的JavaEE架构在标准的low-level 中间件服务平台之上,通过一系列的APIs(EJB,JTA,JMS)也可以成功的开发。由于这些陈旧的JavaEE项目首要关注点都在标准化服务上,而忽略了开发的简单性原则。所以基于JavaEE平台的项目往往投入巨大。
    Java EE平台目标是用来开发基于模块的应用。而模块是指一个单独的程序,一段可以在复杂项目中简单重用的代码。例如:一个order模块包含一个用来持久化的entity bean,一个用来处理业务流程的的session bean,理论上,这样的模块在很大程度上是可以重用的,但是,现实中,这些模块往往使用率不高。Java EE 程序的复杂性主要表现在编写model的时候,开发java EE model 往往需要写很多不必要的重复的代码和测试。这其中至少包括一段典型的在JBDI tree上查阅EJB对象的代码,获得一个数据库链接,拼装并执行数据库查询,并且最终释放数据库资源。首先,这样的程序极大地破坏了OO的封装原则,而且无谓的浪费了大量的程序员的人力。EJBs 的设计初衷是解决分布性事物的,虽然大部分的JavaEE项目包含数据库操作,进而需要一些事物操作,但是这些项目不需要分布性事物。但是一旦使用了EJBs,项目中就引入了大量的用语处理分布性事务的代码。而且这个本来不需要分布性的项目也就成了一个分布性应用,由于有分布性的特性(虽然没用到),所以也对部署和硬件提出了更高的要求。而且由于基于EJBs的程序对JavaEE容器有比较大的依赖,所以Unit Test也变得很困难。所以TDD基本变得不可能。
    由于JavaEE开发的复杂性。Java社区提出了许多新的框架来代替传统的JavaEE架构。其中Struts是一个基于servlet API的MVC实现。Hibernate解决了entity bean的痛苦旅程,它提供了一个基于POJOs的持久化框架,由于POJO不是一个分部式的对象,所以和entity bean相比,它有着更加出色的性能。而且Hibernate不依赖任何容器,所以单元测试也就变得很容易了。
    不同于Struts与Hibernate,Spring Framework 并不是为了提供单独某一层的框架。他实际上提供了一种跨曾的框架支持,在分层的应用体系中,它帮助各层的独特框架更好的交互,而有不用意识到其他层的存在,由于Spring提供一个简单的基于POJOs,并且脱离JavaEE容器的开发环境,所以单元测试也就更加容易了。

没有评论:

发表评论