2009年5月4日星期一

JavaEEDesign_009:与数据层(持久化层)有关的设计模式(摘录+整理)

数据层框架完全抽象了访问数据方法的细节,把业务层与数据层分离。
数据层框架主要使用的设计模式有:

1. 数据访问对象 Data Access Object(1)抽象数据源:Oracle、SQL Server、LDAP......
(2)抽象数据操作CRUD
(3)提供一致的异常 DataAccessException,供DAO使用者捕获。其它特定的异常有NoDataFoundException、OptimisticLockException、ServiceLocatorException,它们都继承自DataAccessException。
(4)提供基本的数据操作方法:
  • findByPrimaryKey (Object pPrimaryKey)
  • insert (ValueObject pValueObject)
  • createValueObject ()
  • update (ValueObject pValueObject)
  • delete (ValueObject pValueObject)
(5)实现方式有两种:
  • 普通Java类:好处就是实现比较简单。
  • EJB:好处是可以利用EJB 容器的特性:事务管理、声明式访问控制、EJB资源池。
(6)谁来调用DAO?——Session Facade。
2. 值对象 Value Object值对象模式的产生的初衷是为了最大限度地减少(减少到一次)对实体EJB的远程调用。值对象的特性如下:
(1)作为数据的逻辑视图(表示实体之间一对一或一对多的关系)。
(2)作为唯一能够在表示层和数据层之间来回传递的数据(因此值对象必须是可序列化的)。
(3)值对象提供如下状态属性:
  • insertFlag
  • updateFlag
  • deleteFlag
  • rowVersion (乐观锁机制,见后文介绍)
(4)值对象应当是轻量级的,不要包含业务逻辑代码,业务逻辑代码应当放到业务层。(5)值对象的对象层次应当保持简单,复杂对象可以考虑使用值对象装配器模式( Value Object Assembler),并且在业务层完成“装配“。
(6)
值对象的数量要适当,不要有过多“毛细值对象
3. 服务定位器 Service Locator
服务定位器通过缓存EJBHome接口和DataSource对象,从而减少JNDI查找次数。
服务定位器模式实现一般采用单例模式。

没有评论: