企业应用架构模式学习(十):数据源架构模式

表数据入口(table data gateway)

充当数据库表访问入口的对象,一个实例处理表中所有的行。

Person Gateway

find(id):recordSet

findwithlastName(String)

update(id,name,..)

insert(id,name,…)

delete(id)

表数据入口包含了用于访问单个表或者视图的所有sql,增删改查。

运行机制

表数据入口接口很简单,一般都是增删改查,每个方法将参数映射到sql调用来实现数据库的交互。由于表数据入口用于数据读写,因此通常是无状态的。

数据返回的结果可以是map,但是无法编译时检查,而且也不是一个非常显示化的接口,如果仅仅用于显示,可使用map传输到前台。

更好的方法是采用数据传输对象,将结果封装成对象,这是我们常用的做法。

 

行数据入口

充当数据源中单挑记录入口的对象,每行一个实例。

企业应用架构模式学习(十):数据源架构模式

运行机制

行数据入口是和单条记录极其相似的对象,在该对象中数据库的每一列都变成一个域。行数据入口一般能实现从数据源类型到内存中类型的任意转换,这一模式保持一行中的数据以便客户可以直接访问行数据库入口,行数据入口是每一数据行的良好接口。

使用行数据入口要面对的问题是,在哪里存放改模式的查找操作,可设置静态查找方法,但是不支持多数据源,可以设置单独的查找方法。

使用时机

通常分两步:第一,是否真的需要入口,第二步,是使用行数据入口还是表数据入口

活动记录

一个对象,它包装数据库表或视图中某一行,封装数据库访问,并在数据库上增加了领域逻辑。

企业应用架构模式学习(十):数据源架构模式

对象既有数据又有行为,活动记录使用最直截了当的方法,把数据访问逻辑置于领域对象中。

运行机制

活动记录本质是一个领域模型,在模型中的类和基数据库中的记录结果是否吻合,每条活动记录负责向数据库保存数据,从数据库加载数据,以及处理作用于数据之上的领域逻辑。活动记录每一个类的域对应数据库的列。

活动记录通常具有下列方法:

  • 由sql结果集中的一行构造一个活动记录实例
  • 为将来对表的插入构造一个新的实例
  • 用静态查找方法来包装常用的sql查询和返回活动记录
  • 更新数据库并将活动记录中的数据插入数据库。
  • 获取或设置域
  • 实现部分业务逻辑

使用时机

活动记录适用于不太复杂的领域逻辑,增删改查。

数据映射器(data mapper)

在保持对象和数据库(以及映射器本书)彼此独立的情况下,在二者之间移动数据的一个映射器层。

对象和关系数据库用来组织数据的机制不同,对象的很多部分如集合和继承在关系型数据库中不存在。在创建一个具有大量业务逻辑的对象模型时,有必要采用这些机制更好的组织它的数据和行为。

企业应用架构模式学习(十):数据源架构模式

数据映射器是分离内存对象与数据库的一个软件层,其职责是在内存对象和数据库之间传递数据并保持他们彼此独立。有了数据映射器,内存对象甚至不需知道数据库的存在。两者独立。

运行机制

分离领域和数据源是数据映射器的主要功能。(hibernate)

对上层隐藏数据入口,保存对象关系,hibernate中配置一对一关系等,延迟加载,防止数据全部加载进来。

1、处理查找方法

用分离接口的方式,利用领域代码把所有需要查找方法放到一个可以置于领域包中的接口类。

2、把数据映射到领域对象的域

setter 器,或者反射。

3、基于元数据的映射

所有sql放置到一类文件中,ibatis的sqlmap。

选用数据映射器可以不考虑数据库问题,不用在支持多种数据库中做考虑,hibernate、ibatis只需要修改简单配置就可以迁移数据库。

 

数据库层是应用程序的面向底层的边界,良好的封装隔离有利用程序的解耦。

转载于:https://my.oschina.net/lohonx/blog/135373