0%

基于中间件的开发(六)轻量级架构和重量级架构

MVC 模式是一种目前广泛流行的软件设计模式,随着 J2EE 的成熟,它正成为 J2EE 平 台上推荐的一种设计模型,将业务处理与显示分离,将应用分为模型、视图及控制层,增加 了应用的可扩展性。MVC 模式为搭建具有可伸缩性、灵活性、易维护性的 Web 系统提供 了良好的机制。

轻量 级 Web 架构不仅保持了 J2EE 的优势, 还简化了 Web 的开发。目前主流的轻量级架构是把 Struts、Spring 和 Hibernate 这三种在 业内比较推崇的开源技术基于 MVC 模式相结合,这样在项目开发中不管是从效率上,费用 上,还是易维护上都能达到很好的效果。

一、Struts 框架

Struts 是一个基于 SUN J2EE 平台的 MVC 框架,主要是采用 Servlet 和 JSP 技术来实 现的。在 Struts 框架中,模型由实现业务逻辑的 JavaBean 或 EJB 构件构成,控制器由 ActionServlet 和 Action 来实现,视图由一组 JSP 文件构成

Struts 把 Servlet、JSP、自定义标签和信息资源整合到一个统一的框架中,开发人员利 用其进行开发时不用自己再编码实现全套 MVC 模式,极大地节省了时间。

Struts 的工作流程为:
首先,JSPview 发起一个以.do 表示的请求;
ActionForm 封装用 户请求数据,同时提供验证数据的功能;
ActionServlet 根据 struts-config.xml 文件来得到处 理这个请求的 Action 对象,并将请求发送给这个 Action 对象;
Action 对象调用 model 去 处理这个请求,将结果返回给 ActionServlet;
ActionServlet 决定将结果返回给对应的 view;
view 得到结果,并将它显示给用户。

二、Spring 框架

Spring Framework是轻量级的 J2EE 应用程序框架,旨在简化 J2EE 的开发,降低 J2EE 项目实施的难度。

框架包括声 明性事务管理,通过 RMI 或 web services 远程访问业务逻辑,mail 支持工具,以及对于 数据和数据库之间持久层的各种配置的支持。Spring 允许自由选择和组装各部分功能,还 提供和其他软件集成的接口,如与 Hibernate、Struts 的集成。

Spring 核心本身是个容器,管理物件的生命周期、物件的组态、相依注入等,并可以控 制物件在创建时是以原型(Pro-totype)或单例子(Singleton)的方式来创立。

Spring 的核心概念是控制反转(Inversionof Control,IoC),更具体而易懂的名词是依赖 注入(Depen-dency Injection),使用 Spring,不必自己在程序码中维护物件的依赖关系,只 需在构件中加以设定,Spring 核心容器会自动根据构件将依赖注入指定的物件。

Spring 的 目标是实现一个全方位的整合框架,在 Spring 框架下实现多个子框架的组合,这些子框架 之间可以彼此独立,也可以使用其他的框架方案加以替代,Spring 成为企业级应用程序一 站式的解决方案。

Spring 的核心要点是支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。 Spring 的 IoC 控件主要服务于利用类、对象和服务去组成一个企业级应用,通过规范的方 式,将各种不同的控件整合成一个完整的应用。

三、Hibernate 框架

Hibernate 是一种对象和关系之间映射的框架,是 Java 应用和关系数据库之间的桥梁。可以将数据库资源映射为一个或者多个 POJO。

四、基于 Struts、Spring 和 Hibernate 的轻量级架构

(1)表示层。

由 Struts 实现,主要完成如下任务:
管理用户请求和响应;
提供一个控 制器代理以调用业务逻辑和各层的处理;
处理从其他层抛给 StrutsAction 的异常;
为显示提 供数据模型;
借助 Struts Validator 框架帮助完成 Web 层的验证工作。

(2)持久层。

由 Hibernate 实现。它通过一个面向对象的查询语言(Hibernate Query Language,HQL)或正则表达式的 API 来检索对象的相关信息。HQL 类似于 SQL,只是把 SQL 里的表和列用对象和它的字段代替。Hibernate 还负责存储、更新、删除数据库记录。同时 Hibernate 支持大部分主流数据库,且支持父表/子表关系、事务处理、继承和多态。

(3)业务层。

由 Spring 来实现。使用 Spring 的优点是:
利用延时注入思想组装代码, 提高了系统扩展性和灵活性,实现插件式编程。
利用 AOP 思想,集中处理业务逻辑,减少 重复代码,构建了较理想的解决方案。
利用其对 Hibernate 的会话工厂(Session Factory)、 事务管理的封装,可以更简洁地应用 Hibernate。

五、轻量级架构和重量级架构的探讨

重量级的开发倒并不是指 EJB 或者是 JNDI,很大意义上,重量级的开发都是需要依赖 一个非常庞大的容器系统进行开发,在 EJB 的开发中,所有开发的内容基本都需要放置在 一个容器系统中进行运行这些容器,因为基本针对大型企业应用,所以体积庞大,占用资源过 多,在开发的过程中效率很低。因为使用大型容器作为开发环境的话,很大一部分时间都用 在了配置、运行这样的过程上,有时候改动一个小小的部分,需要等很长的时间才能看到结 果。

轻量级框架的优势很大程度上是因为加速了开发的速度,不用部署一个很庞大的容器系 统就可以实现以前需要容器才能实现的功能,可以使用 Spring 代替 EJB 中的无状态的会话 Bean,可以使用 Hibernate 代替 EJB 中的实体 Bean,而且可以直接写一个应用程序运行已 经完成的系统,马上可以看到结果,做单元测试非常简单,不需要做太多的工作就可以构建 系统,这些特性对于开发人员来说非常有吸引力。

重 量级框架在大规模运行的时候会表现出非常优异的性能,劣势主要是开发效率较低,轻量级 框架正好相反,开发的时候非常迅速,但是在大规模运行的时候,性能与重量级框架相比还 是有差异的。

不管是轻量级还是重量级框 架,基本解决的是两个问题,一个是事务控制,另一个是持久化控制。

持久化的开发可以和任何框架没有关系,直接使用 JPA 的标准注解即可,所以开发持久化部分的时候可以使用 JPA 进行注解,开发时期用 Hibernate 作为 JPA 的实现进行开发测试,需要上线运行的时候就可以直接部署到 EJB 的实体 Bean 上,在 EJB 3.0 之后,已经很好进行移植部署了。关于事务控制,现在所有的实现方式都比 较简单,针对方法进行注解事务类型即可,开发的时候可以用一个转换器将这些注解转化为 Spring 的映射,快速地进行开发,在上线运行的时候,直接使用 EJB 的会话 Bean 进行部 署就可以解决,这些方式实现起来并不困难,可以很好地解决“重量级”和“轻量级”之间 的矛盾。