代码之家  ›  专栏  ›  技术社区  ›  Bryan Roth

数据访问层的用途是什么?[关闭]

  •  14
  • Bryan Roth  · 技术社区  · 18 年前

    我很早以前就开始了一个项目 数据访问层 项目在我的解决方案,但从来没有开发任何东西。数据访问层的用途是什么?有没有什么好的资源可以让我了解更多关于数据访问层的信息?

    10 回复  |  直到 15 年前
        1
  •  28
  •   swilliams    18 年前

    两个字: Loose Coupling

    为了使用于从数据存储(数据库、平面文件、web服务等)中提取数据的代码与业务逻辑和表示代码分离。这样,如果你必须改变数据存储,你不会最终重写整个事情。

    现在,各种ORM框架都在将DAL与其他层混合在一起。这通常使开发更容易,但更改数据存储可能会很痛苦。公平地说,像这样更改数据存储是相当罕见的。

        2
  •  17
  •   Michael Kelley Franci Penov    11 年前

    1. 抽象实际的数据库引擎 说Oracle使用MS SQL server

    2. 抽象逻辑数据模型 与这些知识脱钩 不可知论者。给你 修改逻辑数据的能力 在不影响业务的情况下进行建模 层

    这里的大多数答案都提供了第一个原因。在我看来,第二个更重要。实际上,业务层不应该知道正在使用的逻辑数据模型。如今,ORMs和Linq#2似乎已经过时了,人们往往忘记(或者看不到存在和应该存在的细微差别)关于#2。

    本质上,为了更好地理解数据层的用途和功能,您需要从业务层的角度来看待事情,记住业务层应该与数据存储的逻辑数据模型无关。

    例如,每当业务层需要数据时,if应该以一种非常简单的逻辑数据模型无关的方式请求它所需的数据。因此它会调用数据访问层,例如:

    GetOrdersForCustomer(42)
    

    它准确地返回它需要的数据,而不知道存储这些信息的表是什么,或者存在什么关系等等。

    The Purpose and function of a Data Access Layer

        3
  •  6
  •   Scott Dorman    18 年前

    数据访问层遵循“关注点分离”的思想,即业务逻辑与数据层(数据库)交互所需的所有逻辑都被隔离到一组类(层)中。这使您可以更轻松地更改后端物理数据存储技术(例如,从XML文件移动到数据库,或从SQL Server迁移到Oracle或MySQL),而不会对业务逻辑产生很大影响(如果正确操作,则不会产生任何影响)。

        4
  •  6
  •   Jonathan Allen    18 年前

    当应用程序的许多不同部分需要以相同的方式访问数据时,数据访问层非常有意义。

    当您需要以多种不同的方式访问相同的数据时,它也很有意义。例如,字处理程序如何读取多种不同的文件类型,并将它们静默地转换为应用程序的内部格式。

        5
  •  4
  •   Guy Starbuck    18 年前

    DAL应该从项目的其余部分抽象出数据库——基本上,除了DAL之外,任何代码中都不应该有SQL,只有DAL应该知道数据库的结构。

    其主要目的是使应用程序的其余部分不受数据库更改的影响,并使扩展和支持应用程序更容易,因为您始终知道在哪里修改数据库交互代码。

        6
  •  1
  •   Esteban Araya    18 年前

        7
  •  1
  •   JPunyon JPunyon    18 年前
        8
  •  1
  •   theschmitzer    18 年前

    好处:

    • 架构更改-见上文
    • 您需要一种与数据库断开连接运行的方法(演示模式):向DAL添加文件序列化/反序列化
        9
  •  0
  •   GEOCHET S.Lott    18 年前

    http://msdn.microsoft.com/en-us/practices/default.aspx 使用DAL将帮助您将数据访问与表示和业务逻辑隔离开来。我经常使用它,以便可以轻松地交换(通过反射和动态加载程序集)数据提供程序。

    另外,看看 Data Access Block 如果你打算使用.NET。这会是一个很大的帮助。

        10
  •  0
  •   Christopher Williams    8 年前

    我想我应该补充的一点是,使用DAL可以提高系统的安全性。例如,DB和DAL可以在公众无法访问的服务器上运行,而业务逻辑可以在面向公共的服务器上运行,这样公共服务器就不能在DB上运行原始SQL。如果公共服务器遭到破坏,这将有助于减轻许多损害。