数据访问模式 orm和cmp区别
2007-03-31 12:41
399 查看
数据访问模式
在分层的软件结构中,业务逻辑层代表了业务数据和业务逻辑。域对象位于业务逻辑层,实体域对象代表应用运行时的业务数据,它存在于内存中,过程域对象代表应用的业务逻辑。数据库用于存放永久性的业务数据。
业务数据在内存中表现为实体域对象形式,而在关系数据库中表现为关系数据形式。数据访问代码负责把实体域对象持久化到关系数据库中,数据访问主要有以下几种模式:
业务逻辑和数据访问耦合:在过程域对象中,业务逻辑和数据访问代码混杂在一起,参见图1。
(图见本机资料里word文档里)
主动域对象模式:由实体域对象负责自身的数据访问细节,这种实体域对象也被称为主动域对象,参见图2。BMP EJB就采用了主动域对象模式。
前2种是从访问逻辑的实现在哪一部分,而后面的orm,jdo等它们只是提出了一种orm中间层,它仍存在访问逻辑在哪里的问题,所以他们是可以和前两种访问模式 进行组合使用。
ORM模式:在单独的持久化层由ORM中间件封装数据访问细节,参见图3。ORM中间件提供对象-关系映射服务,当向数据库保存一个域对象时,把业务数据由对象形式映射为关系数据形式;当从数据库加载一个域对象时,把业务数据由关系数据形式映射为对象形式。
JDO模式:
Java Data Objects(JDO)是SUN公司制定的描述对象持久化语义的标准API。因此采用JDO模式时,整个应用为四层应用结构,参见图4。
严格的说,JDO并不是对象-关系映射接口,因为它支持把对象持久化到任意一种存储系统中,包括:
- 关系数据库
- 面向对象的数据库
- 基于XML的数据库
- 其它专有存储系统
由于关系数据库是目前最流行的存储系统,许多JDO的实现都包含了对象-关系映射服务。
CMP模式:
在J2EE架构中,CMP(Container-managed Persistence)表示由EJB容器来管理实体EJB的持久化,EJB容器封装了对象-关系的映射以及数据访问细节。CMP与ORM的相似之处在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑程序中分离出来;区别在于CMP负责持久化实体EJB组件,而ORM负责持久化POJO,它是普通的基于Java Bean形式的实体域对象。CMP和ORM相比,前者有以下不足:
(1)开发人员开发的实体EJB必须遵守复杂的J2EE规范,而多数ORM中间件不强迫域对象必须满足特定的规范。
(2)实体EJB只能运行在EJB容器中,而POJO可以运行在任何一种Java环境中。
(3) 目前,对于复杂的域模型,EJB容器提供的对象-关系映射能力很有限。相比之下,许多ORM中间件提供了完善的对象-关系映射服务。
(4)尽管按照J2EE的规范,EJB应该是一种可移植的组件,实际上却受到很大限制。因为不同厂商生产的CMP引擎差异很大,它们使用的对象-关系映射元数据各不相同,使得EJB不能顺利的从一个EJB容器移植到另一个EJB容器中。使用ORM中间件就不存在这样的问题,以Hibernate为例,它可以无缝集成到任何一个Java系统中。
在Java软件架构领域,在出现基于CMP的实体EJB之前,基于JavaBean形式的实体域对象早就存在了。但是把基于JavaBean形式的实体域对象称为POJO,却是最近才发生的事。POJO(Plain Old Java Object)的意思是又普通又古老的Java对象,之所以称它古老,是因为相对于基于CMP的实体EJB显得很古老。
随着各种ORM映射工具的日趋成熟和流行,POJO又重现光彩,它和基于CMP的实体EJB相比,既简单,又具有很高的可移植性,因此联合使用ORM映射工具和POJO,已经成为一种越来越受欢迎的,用于取代CMP的持久化方案。
在分层的软件结构中,业务逻辑层代表了业务数据和业务逻辑。域对象位于业务逻辑层,实体域对象代表应用运行时的业务数据,它存在于内存中,过程域对象代表应用的业务逻辑。数据库用于存放永久性的业务数据。
业务数据在内存中表现为实体域对象形式,而在关系数据库中表现为关系数据形式。数据访问代码负责把实体域对象持久化到关系数据库中,数据访问主要有以下几种模式:
业务逻辑和数据访问耦合:在过程域对象中,业务逻辑和数据访问代码混杂在一起,参见图1。
(图见本机资料里word文档里)
主动域对象模式:由实体域对象负责自身的数据访问细节,这种实体域对象也被称为主动域对象,参见图2。BMP EJB就采用了主动域对象模式。
前2种是从访问逻辑的实现在哪一部分,而后面的orm,jdo等它们只是提出了一种orm中间层,它仍存在访问逻辑在哪里的问题,所以他们是可以和前两种访问模式 进行组合使用。
ORM模式:在单独的持久化层由ORM中间件封装数据访问细节,参见图3。ORM中间件提供对象-关系映射服务,当向数据库保存一个域对象时,把业务数据由对象形式映射为关系数据形式;当从数据库加载一个域对象时,把业务数据由关系数据形式映射为对象形式。
JDO模式:
Java Data Objects(JDO)是SUN公司制定的描述对象持久化语义的标准API。因此采用JDO模式时,整个应用为四层应用结构,参见图4。
严格的说,JDO并不是对象-关系映射接口,因为它支持把对象持久化到任意一种存储系统中,包括:
- 关系数据库
- 面向对象的数据库
- 基于XML的数据库
- 其它专有存储系统
由于关系数据库是目前最流行的存储系统,许多JDO的实现都包含了对象-关系映射服务。
CMP模式:
在J2EE架构中,CMP(Container-managed Persistence)表示由EJB容器来管理实体EJB的持久化,EJB容器封装了对象-关系的映射以及数据访问细节。CMP与ORM的相似之处在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑程序中分离出来;区别在于CMP负责持久化实体EJB组件,而ORM负责持久化POJO,它是普通的基于Java Bean形式的实体域对象。CMP和ORM相比,前者有以下不足:
(1)开发人员开发的实体EJB必须遵守复杂的J2EE规范,而多数ORM中间件不强迫域对象必须满足特定的规范。
(2)实体EJB只能运行在EJB容器中,而POJO可以运行在任何一种Java环境中。
(3) 目前,对于复杂的域模型,EJB容器提供的对象-关系映射能力很有限。相比之下,许多ORM中间件提供了完善的对象-关系映射服务。
(4)尽管按照J2EE的规范,EJB应该是一种可移植的组件,实际上却受到很大限制。因为不同厂商生产的CMP引擎差异很大,它们使用的对象-关系映射元数据各不相同,使得EJB不能顺利的从一个EJB容器移植到另一个EJB容器中。使用ORM中间件就不存在这样的问题,以Hibernate为例,它可以无缝集成到任何一个Java系统中。
在Java软件架构领域,在出现基于CMP的实体EJB之前,基于JavaBean形式的实体域对象早就存在了。但是把基于JavaBean形式的实体域对象称为POJO,却是最近才发生的事。POJO(Plain Old Java Object)的意思是又普通又古老的Java对象,之所以称它古老,是因为相对于基于CMP的实体EJB显得很古老。
随着各种ORM映射工具的日趋成熟和流行,POJO又重现光彩,它和基于CMP的实体EJB相比,既简单,又具有很高的可移植性,因此联合使用ORM映射工具和POJO,已经成为一种越来越受欢迎的,用于取代CMP的持久化方案。
相关文章推荐
- ADO 和ADO.NET数据访问功能的区别
- Atitit orm的实现模式 data-mapper模式和active-record模式有什么区别
- 使用ORM工具进行数据访问
- 归档模式和非归档模式下的数据恢复区别
- 数据访问两种模式的比较
- 发布NBearLite v1.0.0: 提供强类型查询语法的非ORM数据访问组件 [8/2 更新至v1.0.0.9 beta - 修复NBearLite参考手册某些操作系统打开错误的问题]
- Oracle与DB2数据存储模式的区别详解
- Entity Framework 学习总结之二:数据访问区别
- 微服务企业数据访问模式
- Spring 4 官方文档学习(十)数据访问之ORM
- php的public、protected、private三种访问控制模式的区别
- 360兼容模式(ie10)缓存策略导致访问数据出错
- AsyncTask异步加载以及Proxy代理模式访问网络数据
- 单例模式与静态函数能否保证并行访问数据的安全。
- 关于TCP流模式与UDP数据报文模式区别
- spark on yarn模式下配置spark-sql访问hive元数据
- 数据访问组件&ORM测试框架(1)——EF方案实现
- DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
- 论基于数据访问的集合类(Data Access Based Collection)和领域事件(Domain Event)模式 .
- 【设计模式】数据访问对象模式