弥合对象、关系之间的鸿沟(1/10)

O/RM技术能够简化数据访问,但也须要注意到引入这个新的抽象层来的挑战。程序员

关键字:对象-关系映射数据库

  现代的应用程序经常是使用两种大相径庭的技术构建而成:业务逻辑部分使用面向对象编程,数据存储使用关系型数据库。面向对象编程是实现复杂的系统的一个关键技术,它提供的好处包括可重用性、健壮性和可维护性。关系型数据库是保存数据的仓库。O/RM(对象关系映射)则是二者之间的桥梁,它容许应用程序以面向对象的方式访问关系数据。 编程

  O/RM是对象持久化的一个专业化的通常概念。IBM研究员格雷迪·布赫在他的书《面向对象的分析与应用设计》中,将“持久性”定义为“在程序生命周期以外的数据”,是对象模型1中的次要元素。然而,在现代应用程序中,贡献在持久化上的工做量,有时能够主宰一个项目的成本,而使用O/RM工具,能够显着下降成本。服务器

  有一些其余技术能够用于从面向对象的程序访问关系型数据,但这些技术通常不利用编程语言的对象模型特性。要充分利用对象模型的特性,数据库访问技术须要支持信息隐藏、关注点分离、继承、变化检测、惟一性保持和数据库独立性。 数据结构

  关注点分离是将一个程序分为一些逻辑部分的过程,这些部分有不多或根本没有重叠。在数据库编程中有几部分应分开:1)业务方法中查找和操做领域对象的方法;2)领域对象中可能会致使内部状态的变化的方法和可能会调用相关联的对象方法的方法;3)生成的数据库命令中对行和列执行插入,查询,更新,和删除的;4)以及用于数据库事务划分的方法。app

  信息隐藏是关注点分离的一个实现策略,此策略根据接口定义的行为实现特定的类,以下降复杂性和成本。类实现的行为要和调用者的行为分开。改变一方的行为并不必定须要也改变另外一方。编程语言

  继承容许代码的重用,一些相关联的类中共同的行为只被定义一次,具备惟一性的行为只在类之间的行为不一样的地方实现。如此,一个类的行为和子类或父类(超类)的行为相较,多是相同或不一样的,而且此行为独立于调用者的行为。工具

  变化检测在一个数据库事务中一直跟踪领域对象的变化,因此在事务结束时,更改将应用到数据库。 设计

  惟一性保持是数据库交互中的一个属性,在交互中一个独立领域实例对应一个数据库行,而无论用户是如何得到对象的:经过查询数据库,从一个实例的引用导航到另外一个,或经过提供其首要识别符找到一个肯定的领域实例。倘若没有惟一性保持,对一个领域实例进行的更改将不会被其余表明同一数据库行的领域实例看到,这可能会致使数据库损坏。 对象

  数据库独立性,容许使用一个共同的API和领域模型操做各类数据库而不改变数据库的应用程序视图。

  最先用于访问关系数据库的技术(如今仍然很是流行),使用许多API传输SQL语句到服务器,并把执行语句的结果返回给应用程序。这会留给应用程序来决定,是直接使用结果仍是建立数据结构来表示查询的结果,并复制查询结果给这些数据结构。

  直接模式化的查询结果所用的的数据结构,没法模型化数据库中存在的关系;所以,实例之间的关联没有被数据结构充分描述。使用这种类型访问的例子包括ODBC(开放数据库链接)接口和JDBC(Java数据库链接)接口。这些接口容许有限的关注分离,但更多状况下是业务逻辑与数据库编程混合在一块儿。他们不支持信息隐藏,继承,变化检测,惟一性保持或数据库独立性。

  更强大的技术是在其接口中提供一些方法将查询结果复制到用户指定的数据结构。用户提供全部注释过的SQL语句,使它们能够对应数据结构。用户建立的SQL语句包括全部的查询,加上插入,更新和删除。这些技术处理不少容易出错和耗费时间的工做以分析查询结果,但仍然给用户留下许多艰巨的任务。以这种风格访问的一个例子是iBATIS,它支持信息隐藏和有限的关注分离,但不支持继承,变化检测,惟一性保持或数据库独立性。

  使用O/RM,存储在关系数据库中的数据将做为本地对象编程语言中的对象表示给应用程序。程序员映射领域对象模型类到关系表,并使用一个由持久性提供程序实现了的API来访问数据库。对数据库的查询表达为领域对象模型的方式。提供程序直接从领域模型生成SQL语句。马丁·福勒称这种方法DataMapper.2

  O/RM技术和产品在许多面向对象的语言中可用,包括Java,C++,C#,Python,Smalltalk,Ruby和Groovy。O/RM所用的技术和编程范式适用于许多支持这些语言的产品。(在这篇文章中,例子使用Java)

相关文章
相关标签/搜索