`
abcdzt
  • 浏览: 13810 次
社区版块
存档分类
最新评论

SDO和DAO的比较

    博客分类:
  • SCA
阅读更多
原文链接:
http://www.codefutures.com/weblog/andygrove/archives/2006/03/sdo_versus_dao.html
说明:文章版权归作者Eta Huang和goCom社区共同所有,转载必须注明本文作者和出处。

前不久总有人问我SDO和DAO之间的区别,我当时无法给出一个简短的回答,所以我决定把那些小文章汇总到这里,为以后参考之用。
我觉得开始最好分别听听DAO和SDO的作者是怎么描述各自的东东的。

摘自《Core J2EE Design Patterns - Java Blueprints》网站:
“Data Access Object (or DAO) 模式:

×将一个数据源的客户端接口与数据访问机制分离
×将一个特定的数据源访问接口适配成一个通用的客户端接口(译者按:Java中就是JDBC啦  )
DAO模式使得数据访问机制可以独立于访问数据的代码进行变动。 ”

在SDO规范中则写有这么一段话:
“Service Data Objects (SDO)是一种数据编程架构和一组API。
SDO主要用于简化数据编程,让开发人员能集中解决业务逻辑问题而不是底层技术(译者按:每个规范中似乎都有这么一套说辞,类似于十六中全会  )
SDO通过以下手段简化数据编程:
×统一不同类型的数据源的数据访问编程
×提供一套一致的应用模式的支持
×让应用、工具和框架能够更便捷地查询、浏览、绑定、更新和获取数据的元信息。”

很显然,DAO和SDO的目标有很多共同点. 最值得注意的一点就是:

×SDO和DAO均提供了一套语言级的API将客户端代码从底层数据源API中抽象出来
×SDO和DAO都可以用在任何数据源上(数据库,XML文档,企业系统,等等)

不过,它们之间也有一些显著的差异:

×DAO是一种设计模式,而SDO是一个规范。这是一个相当大的差异。由于SDO是一个规范,开发商可以开发于标准兼容的工具、驱动或框架。这意味着开发者不用在项目一开始就从头开始手工设计和编写DAO对象的代码,而是利用已有的SDO工具和框架以大大减少开发的时间和费用。需要一提的是,虽然有FireStorm/DAO这样的DAO框架,但由于DAO的实现不是标准化的也没有相应的规范,所以一些开发者不是甚喜欢这类工具。

×SDO提供了脱机模式的访问,data graph(树状结构的数据对象的集合)可以脱离数据源离线修改,轻易地在分布式服务间传递(以Java对象或XML文档的方式),之后再发回到数据访问服务层并持久化到数据源中。DAO设计模式则没有相关的要求

×SDO 既提供了动态API,也规定了如果通过数据源的schema来生成静态API的代码(译者按:即POJO和getter/setter方法生成)。这使得用户可以在动态和静态API访问方式间选择,并且可以在一个应用中同时使用两种方式!DAO则没有提供动态API,这样一来为了动态访问数据,开发人员不得不退回到使用类似JDBC的这样的低级API。

×SDO 提供了一套SDO的数据类型来保证不同类型的数据源和不同语言之间的可移植性和兼容性。现在SDO已经有了Java, C++, 和 PHP上的实现. DAO则是Java标准,并没有涉及类似的话题

×SDO 特别适合与基于Service Oriented Architecture (SOA) 架构的设计模式。SDO规范的最新版本已经和SCA规范一起发布了。SCA实现了分布式SOA架构下服务之间的点到点互动。SCA是业界对微软的 Indigo/WCF 战略的强有力的回应,也许是这两年 SOA/Web Services 上最重要的发展。

剩下的问题显然是何时使用DAO,何时使用SDO.

DAO对于将客户端代码从各种类似JDBC, EJB CMP, 或 Hibernate等持久化技术中抽象出来是一种很不错的选择, 它让应用中的数据访问代码与底层的持久化技术(有可能被要求替换)互相隔离,同时简化了应用的部署。当DAO代码可以使用FireStorm/DAO这样的工具来生成的时候,开发时间被大大减少了。

对于用于面向服务架构下的应用、多语言环境或需要以脱机方式访问数据的情况,使用SDO开发应用则是个很不错的选择。
分享到:
评论

相关推荐

    commonj.sdo-2.1.1

    META-INF/MANIFEST.MF commonj.sdo.ChangeSummary.class commonj.sdo.DataGraph.class commonj.sdo.DataObject.class commonj.sdo.helper.CopyHelper.class commonj.sdo.helper.DataFactory.class commonj.sdo....

    commonj.sdo

    commonj.sdo.ChangeSummary.class commonj.sdo.DataGraph.class commonj.sdo.DataObject.class commonj.sdo.helper.CopyHelper.class commonj.sdo.helper.DataFactory.class commonj.sdo.helper.DataHelper.class ...

    sdo2shp和shp2sdo

    标题中的“sdo2shp和shp2sdo”是指两种工具,分别用于将Oracle Spatial(SDO)数据转换为ESRI Shapefile(SHP)格式,以及将Shapefile转换回Oracle Spatial数据。这两个工具在地理信息系统(GIS)领域中扮演着重要...

    CANopen的SDO介绍

    节点1将作为SDO客户端,节点2和节点3将作为SDO服务器。我们将介绍如何编写对象字典、如何实现数据交换等内容。 四、结论 本文通过介绍CANopen的SDO功能,详细解释了SDO的工作机理、对象字典的编写、数据交换过程等...

    如何让使用SDO

    SDO 客户机使用的是 SDO 编程模型和 API,而不是特定于技术的 API 和框架。 2. 数据中介服务:数据中介框架不属于 SDO 1.0 规范,常见的 DAS 有 JDBC DAS、实体 EJB DAS 和 XML DAS 等。 3. 数据源:数据源不限于...

    SCA和SDO标准(PDF文档)

    ### SCA和SDO标准详解 #### 一、SCA与SDO概述 **服务组件架构(Service Component Architecture,SCA)** 和 **服务数据对象(Service Data Object,SDO)** 是由OpenCSA组织发起的一组规范,旨在简化和服务化面向...

    SDO 规范标准说明书

    同时,该版本加强了与相关技术标准的兼容性,如XML Schema和Web Services Description Language (WSDL),进一步提高了SDO的实用价值和应用范围。 五、SDO规范的应用场景 SDO规范的应用广泛,尤其在企业级应用开发...

    SDO的JAVA实现规范

    "SDO_SDO的JAVA实现规范_V2.1.0_Pegasus.pdf"文档应该是SDO 2.1版的Java实现指南,涵盖了详细的概念、API用法和示例,是学习和理解SDO Java实现的重要参考资料。 ### 实战应用 在实际开发中,SDO可以用于构建灵活的...

    带你了解SDO

    3. **数据仓库和分析**:在大数据处理和分析场景中,SDO可以高效地搬运数据,支持复杂的分析操作。 **总结** SDO作为SOA的重要组成部分,通过提供统一的数据模型和管理机制,降低了跨系统数据交换的复杂性,提高了...

    Service Data Objects (SDO) Programmer Guide

    通过上述教程和文档的学习,开发者可以深入了解 SDO 的原理和应用方法,从而更好地利用这项技术解决实际问题。无论是对于初学者还是有经验的开发者来说,Service Data Objects (SDO) 程序员指南都是一份宝贵的资源。

    sca sdo中文资料

    【标题】"SCA SDO中文资料"涵盖了关于Service Component Architecture (SCA)和服务数据对象(Service Data Objects, SDO)的中文学习资源。SCA是一种用于构建和组装企业级服务的编程模型,它强调服务的组合和重用,...

    全部的SCA&SDO中文规范

    标题中的“全部的SCA&SDO中文规范”指的是Service Component Architecture (SCA) 和 Service Data Objects (SDO) 的中文版本规范集合。这些技术是IBM提出的用于构建面向服务架构(SOA)应用的关键组件。 1. **...

    commonj.sdo.jar

    5. **Helper Classes**:在"commonj.sdo.jar"中,可能包含了一些帮助类,这些类提供了一组方法来简化SDO的使用,例如创建、修改和查询数据对象。 6. **Version Compatibility**:使用特定版本的库(如2.1.1)时,...

    PDO_SDO.zip_PDO SDO_canopen_canopen SDO_pdo与sdo_sdo

    PDO(Process Data Object)和SDO(Service Data Object)是CANopen通信协议中的核心概念,它们在设备间传输数据和管理参数配置上起着至关重要的作用。CANopen是一种基于CAN(Controller Area Network)物理层的高层...

    Oracle为sdo_geometry创建空间索引

    Oracle 中创建空间索引的实现步骤和注意事项 空间索引是 Oracle 中的一种特殊索引类型,用于加速空间数据的查询和检索。空间索引可以大大提高空间数据的查询效率,特别是在处理大量空间数据时。本文将详细介绍如何...

    sdo规范及其应用介绍

    SDO是一个数据访问和管理的抽象层,它定义了一组接口和类,这些接口和类用于描述和操作数据。SDO的核心特性包括动态数据模型、变更跟踪和事件通知、以及对多种数据源的支持。SDO的动态模型允许数据结构在运行时发生...

    PDO SDO应用实例分析,让人茅塞顿开!

    通过对 PDO 和 SDO 的分析,我们可以看到这两种技术的优点和缺点,并且可以根据不同的应用场景选择合适的技术来实现业务系统的集成。 知识点: 1. PDO 是一种基于 PHP 的数据访问对象模型,提供了一个统一的接口来...

Global site tag (gtag.js) - Google Analytics