OR Mapping的数据模式

OR Mapping的数据模式

程序语言已经由面向过程的模型全面转向为面向对象的模型,UML的出现更加革新了软件开发方法论。O/R Mapping的概念也就应运而生了。 

为什么要提出O/R Mapping概念

  程序语言已经由面向过程的模型全面转向为面向对象的模型,UML的出现更加革新了软件开发方法论。然而 数据库模型却从未随着开发语言的进步而随之革新,仍然使用面向关系的数据库模型。关系模型对现实世界的建模通常是不可能的,反过来讲,现实世界的对象实体 必须转变成行和列的格式存放在数据库中,这样使得面向对象的开发方法论的优势无法全面呈现出来,应用程序简洁性也遭受到损害。

  程序语言已经由面向过程的模型全面转向为面向对象的模型,UML的出现更加革新了软件开发方法论。然而 数据库模型却从未随着开发语言的进步而随之革新,仍然使用面向关系的数据库模型。关系模型对现实世界的建模通常是不可能的,反过来讲,现实世界的对象实体 必须转变成行和列的格式存放在数据库中,这样使得面向对象的开发方法论的优势无法全面呈现出来,应用程序简洁性也遭受到损害。

  O/R Mapping能避免繁琐的数据访问细节,对象和关系的行列转换都由O/R Mapping完成,不需要写过多的数据访问细节代码,面向对象的概念和关系数据之间的映射可抽象成为单个组件的职责,独立于应用程序之外。

3 O/R Mapping概念

  O/R Mapping实际是通过一系列设计模式,使得原本需要硬编码在程序中的SQL语句可以由程序动态产生,或者将SQL语句写入XML配置文件中,通过API访问获取SQL语句返回的对象查询结果,而不是ResultSet这类对象。

  这样带来的优点是业务代码与数据访问细节完全隔离,将数据访问抽取提升到组件的层次。

    O/R Mapping的访问模型和设计模式主要分如下几类:
 领域逻辑模型(Domain Logic Patterns)
 数据源架构模式(Data Source Architectural Patterns)
 对象-关系行为模式(Object-Relational Behavioral Patterns)
 对象-关系结构模式(Object-Relational Structural Patterns)
 对象-关系元数据映射模式(Object-Relational Metadata 、Mapping Patterns)

3.1 逻辑分类模型(Domain Logic Patterns)

A. Transaction Script
将一个业务逻辑处理计算过程和数据库查询等代码混合在一起

B. Domain Model
将业务处理的行为和获取数据的行为分离,更合理的利用OO思想

C. Table Module
每一张表有一个类来处理相关业务逻辑

D. Service Layer
建立一组业务操作方法,定义出应用程序和数据库访问之间的边界服务。

3.2 数据源架构分类模式(Data Source Architectural Patterns)

E. Table Data Gateway
    单独的一个类,通过这个类访问和操作某一数据表,类中的每个方法都操作表的一条以上的记录行数,是一种纯粹的数据库操作

F. Row Data Gateway
由一个对象扮演Gateway,对应一数据库的一条记录。即将数据库存取操作交给内存中另外一个对象来执行。
这种模式常常和Domain Layer Patterns:Transaction Script一起使用。

G. Active Record
      一个对象包装数据库表的一条记录。并加入一些如doInsert,doModify等方法。这就是ActiveRecord。而它的本质是Domain Model 
     区分Gateway和Active Record,主要是看SQL语句是在对象中管理还是在对象外管理。

H. Data Mapper
      抽象了Row Data Gateway和Table Data Gateway,将数据库访问代码封装起来了
 
3.3 对象-关系行为模式(Object-Relational Behavioral Patterns)

I. Unit of Work
维护由事务或者并发引起的数据对象值被改变后的同步问题。

J. Identity Map
将所有根据主键获取的对象缓存起来。

K. Lazy Load
当需要数据时,才从数据库去查询获取数据。

3.4 对象-关系结构模式(Object-Relational Structural Patterns)

L. Identity Field
 生成一个数据表主键值,主键的值由多种产生策略,可用数据库身的Sequence,也可自己实现。

M. Foreign Key Mapping
映射有外键关系的两个数据表所对应的持久化对象之间的引用关系

N. Association Table Mapping
查询具有关系表的对象列表

O. Dependent Mapping
 脏数据检查更新

P. Embedded Value
 一个对象可能被映射到多个表所对应的其它对象上

Q. Serialized LOB
    大对象的find、update、insert操作

R. Single Table Inheritance
    某一表的每个字段分别映射一个类的O/R继承关系

 
S. Class Table Inheritance
多个表都有各自的映射类,且这些类组成一颗继承树


 
T. Concrete Table Inheritance
多个表都有各自的映射类,且这些类组成一颗继承树,子表字段都继承父表的字段。


 
U. Inheritance Mappers
O/R映射关系的层次结构


 
3.5 对象-关系元数据映射模式(Object-Relational Metadata Mapping Patterns)

V. Metadata Mapping
维护对象/关系映射元数据的详细定义

W. Query Object
能产生SQL条件的对象

X. Repository
一个应用程序包含处理多个Domain对象,每个域对象可能映射多表或者单表甚至关系表,对这些Domain对象的增加、删除、修改会引起所映射表的记录 的变动,由于应用中Domain这类对象一定会很多,所以需要有一种方式管理这些域对象,Repository模式就是起到这种作用。

转载于:https://www.cnblogs.com/madonion/articles/2264015.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值