日期:2014-05-19  浏览次数:20829 次

J2EE核心模式一

概要

本文对J2EE企业架构应用的基本模式(Core J2EE Patterns)做一个概要介绍。

下图基本上列出了J2EE企业架构应用的基本模式,这些基本模式大致分为以下3类:表示层;逻辑处理层;集成层。

Presentation Tier
Intercepting Filter:
Context Object
Front Controller
Application Controller
View Helper
Composite View
Dispatcher View
Service To Worker

Business Tier
Business Delegate
Service Locator
Session Facade
Application Service
Business Object
Composite Entity
Transfer Object
T O Assembler
Value List Handler

Integration Tier
Data Access Object
Service Activator
Domain Store
Web Service Broker

图:(出自[sun.com]Core J2EE Patterns: Patterns index page)

Data Access Object(数据存取对象)

Data Access Object模式又称数据存取对象模式,它提倡使用Data Access Object(DAO)来抽象与封装所有对数据源的访问。
Data Access Object模式介绍

我们从问题,解决方法,策略,优点等几个方面介绍Data Access Object模式。最后给出Data Access Object的相关联结。

问题

许多J2EE应用都需要在各种不同的地方存取持久数据。这些持久数据可以有各种各样的实现机制,它可以是关系数据库(RDBMS),OODB,文件系统,XML,或者是其他系统诸如LDAP等。对这些持久数据的访问没有统一的规格,需要存取持久数据的组件可能分散在系统的不同地方,它们可能是Session Bean,Entity Bean,或JSP的View Helper,或其它的Java Object等。如果在这些组件中,分散着对持久数据的相同或不同的访问逻辑代码,将存在以下问题:

- 各组件严重耦合数据持久策略。当数据持久策略发生改变时,各组件将变得不可用或不得不进行大面积的修改,也就是说,大大降低了数据持久策略的可变换性。

- 对多种数据持久策略的支持将变得不可能或极其困难。

- 各组件里存在大量重复拷贝风格的代码。

- 对持久数据的存取缺乏统一的存取界面,一方面对持久数据的存取变得困难;另一方面容易造成对持久数据访问API的误用。

解决方法

Use a Data Access Object (DAO) to abstract and encapsulate all access to the data source. The DAO manages the connection with the data source to obtain and store data.

使用Data Access Object(DAO)来抽象与封装所有对数据源的访问。DAO负责管理对数据源的连接,以及数据的存取。

Data Access Object模式结构图:

Client(Business Object)

Client可以是Session Bean,Entity Bean,或JSP的View Helper,或其它的Java Object等..

DataAccessObject

抽象与封装所有对数据源的访问。DAO允许Business Object可以透明地访问数据源。

DataSource

数据源。它可以是关系数据库(RDBMS),OODB,文件系统,XML,或者是其他系统诸如LDAP等。

Data(Transfer Object)

存取的数据。

策略

Data Access Object的生成策略多种多样,可以使用工具自动生成;可以使用虚拟工厂(Abstract Factory)或工厂方法(Factory Method)模式;可以在DAO中进行缓存或者控制只读属性等。

优点:

使用Data Access Object模式有以下好处:

- DAO提供访问数据源的简单界面,容易使用,各Business Object组件可以透明地访问数据源而无需知道其实现细节。

- 容易集成不同的数据源实现方案。

- 减少Business Object组件的代码复杂性。

- 对数据源访问的集中控制。

Data Access Object例:

DAO开发一例:使用Java Generics简化数据库存取类DAO开发

相关模式

Transfer Object

DAO 使用 Transfer Object 来传输数据。

Factory Method [GoF] 与 Abstract Factory [GoF]

DAO 可以使用Factory Method [GoF] 与 Abstract Factory [GoF]模式来实现。

Broker [POSA1]

DAO 担当这样一种角色,它可以打破 资源层与Business Object组件之间的耦合关系。
参考资料:

Core J2EE Pattern Catalog

Core J2EE Patterns - Data Access Object

DAO开发一例:使用Java Generics简化数据库存取类DAO开发
Session Facade(Session外观)

Session Facade模式又称Session外观模式,它建议在多层分布式的应用中,在逻辑业务处理层增加一种起着外观(facade)作用会话Bean,表示层组件通过该会话Bean与其它业务逻辑处理组件(SessionBean,EntityBean,DAO等)交互。
Session Facade模式介绍

我们从问题,解决方法,策略,优点等几个方面介绍Session Facade模式。最后给出Session Facade的相关联结。

问题

在分布式的多层应用J2EE环境中,往往存在多个小粒度的业务逻辑处理组件(包括 SessionBean,EntityBean,DAO等),为了完成某个业务处理,表示层组件(客户端)往往需要调用多个业务逻辑处理组件。表示层对业务逻辑处理组件的大量分散调用,将产生以下问题:

- 表示层与业务逻辑层之间的高度耦合性。表示层严重依赖业务逻辑组件。

- 当表示层组件与业务逻辑处理组件分别位于不同的网络环境中时,对业务逻辑处理组件的大量访问或调用将引起过多的网络访问,影响系统的执行效率。

- 缺乏统一的访问策略,导致业务逻辑处理组件的误用。

题外话:表示层与业务逻辑层之间的高度耦合性问题可以使用Business Delegate模式解消。

解决方法

Use a session bean as a facade to encapsulate the complexity of interactions between the business objects participating in a workflow. The Session Facade manages the business objects, and provides a uniform coarse-grained service access layer to clients.

使用Facade Session Bean,该Session Bean从更大粒度的业务角度来封装复杂的业务流