ORM和DAL有什么区别?

时间:2018-03-26 20:38:49

标签: orm data-access-layer

我已经阅读了两篇文章,但它让我更加困惑。我试图找到差异(和相似之处),但我无法说服自己。它们都是业务逻辑和数据库之间的中间层。是否存在差异或是否相同?

3 个答案:

答案 0 :(得分:3)

ORM(对象/关系映射器):

  • 它是一个执行输入SQL查询的库/工具(一些ORM也会为您生成查询)并将输出DataReader(或其他语言中的等效项)转换(映射)到强类型对象。这是任何ORM的基本特征。
  • 也就是说,它可以作为数据存储和应用程序之间的层。
  • ORM的核心角色是映射;它总是(主要是?)返回强类型对象。在极少数情况下,它可能会返回由intstring等语言提供的基本数据类型中的值。
  • 这是应用程序无关的;除了你必须为每个应用程序/数据存储单独配置它。
  • 这只涉及RDBMS。
  • 一些高级ORM(完整ORM)可用作DAL;这主要是一个设计决定。
  • 由于与应用程序无关,因此无法实现特定的持久性逻辑。

DAL(数据访问层):

  • 这是一个处理您所有数据需求的图层。但这与ORM不同。
  • 实际上,可以在内部使用 ORM进行任何RDBMS通信。虽然DAL可以在不使用任何ORM的情况下进行设计。
  • DAL可能会返回强类型对象,但并非总是如此。
  • DAL可以与任何形式的数据存储进行通信,包括Web API,XML,RDBMS。
  • 根据DAL的设计方式,映射可能也可能不是DAL的一部分。
  • 这是特定于应用程序。
  • 可以使用不同的模式将DAL实现为数据访问对象或存储库。
  • 专为特定应用而设计,这可能包括您的特定持久性逻辑,如数据加密。

答案 1 :(得分:1)

在Java中,当一个引用对象关系映射时最常见的情况是表映射到Java对象中。一个非常流行的对象关系映射器是Hibernate。让我们假设你有一排汽车的桌子。当然它有很多列,如Year,Make,Model等.ORM会将此表映射到Car.java ,其数据成员对应于列这一行。

映射发生在数据访问层内,数据访问层由执行转换的类组成。此外,您可能拥有提供某些Java对象的服务类,这些Java对象依赖于某些条件(查询)。一个例子是让我们说你有一个用户的应用程序。您可能有一个带有getAllUsersSortedByLastName()类的UserService.java类来执行该操作。这将涉及利用活动数据库连接,执行正确查询以获取用户行,将这些用户放入用户 Java对象,将这些User.java对象放入一个List,最后在返回之前根据需要处理该列表。执行我所描述的内容的能力都将在您的应用程序的数据访问层中。您可以使用ORM来执行表行和Java对象之间的映射,反之亦然。

答案 2 :(得分:1)

ORM是一种通用编程方法,主要围绕处理系统中的数据,以一种方式呈现它们(并允许您使用它们)作为您选择的编程语言中的对象。即使数据来自与您选择的编程语言无关的数据源。通过对象“胶合代码”与数据交互的抽象概念是ORM。

另一方面,DAL只是编程语言提供的整个事物集合的名称,这使得处理存储数据变得更容易。对于谈论“处理存储数据的所有API”来说,它实际上是一个方便的术语。

并将它们结合在一起:“所选编程语言的数据访问层可能使用对象关系映射。”