很久以前我启动了一个项目,并在我的解决方案中创建了一个数据访问层项目,但从未在其中开发任何内容。数据访问层的目的是什么?有没有一些好的资源可以让我了解更多关于数据访问层的知识?
很久以前我启动了一个项目,并在我的解决方案中创建了一个数据访问层项目,但从未在其中开发任何内容。数据访问层的目的是什么?有没有一些好的资源可以让我了解更多关于数据访问层的知识?
简而言之:松耦合
将从数据存储(数据库、平面文件、Web服务等)中提取数据的代码与业务逻辑和表示层代码分离。这样,如果您必须更改数据存储,就不必重写整个程序。
如今,各种ORM框架有点混合了数据访问层和其他层。这通常使开发更加容易,但更改数据存储可能会很痛苦。公平地说,那样更改数据存储是相当罕见的。
数据访问层的两个主要目的如下:
抽象实际的数据库引擎或其他数据存储,使您的应用程序能够从使用Oracle切换到使用MS SQL Server等
抽象逻辑数据模型,使您的业务层与此知识解耦,并且对其不关注,从而使您能够修改逻辑数据模型而不影响业务层
大多数答案都提供了第一个原因。在我看来,第二个原因更为重要。基本上,您的业务层不应该知道正在使用的逻辑数据模型。如今,随着ORM和Linq #2似乎被忽略,人们往往会忘记(或不能看到确实存在且应该存在的细微差别)。
基本上,要深入理解数据层的目的和功能,您需要从业务层的角度看待问题,并记住业务层应该不关心数据存储的逻辑数据模型。
因此,每次业务层需要数据时,它应该以非常简单且与逻辑数据模型无关的方式请求所需的数据。因此,它会调用数据访问层,例如:
GetOrdersForCustomer(42)
它恰好获取所需数据,而不知道存储此信息的表或存在的关系等内容。
我在我的博客上写了一篇更详细的文章。
当应用程序的许多不同部分需要以相同的方式访问数据时,数据访问层是有意义的。
当您需要以许多不同的方式访问相同的数据时,这也是有意义的。例如,文字处理器可以读取许多不同的文件类型并将它们静默地转换为应用程序的内部格式。
请记住,数据访问层也可能非常低效。如果您正在构建一个关键性能为数据访问的系统,则将其与业务逻辑分离可能会使一些重要的优化变得不可能。
数据访问层(DAL)应该将数据库与项目的其他部分分离 - 基本上,除了DAL之外,任何代码中都不应该有SQL,并且只有DAL应该知道数据库的结构。
主要目的是隔离应用程序的其余部分免受数据库更改的影响,并使扩展和支持应用程序变得更容易,因为您始终会知道去哪里修改与数据库交互的代码。
目的是将数据库访问细节抽象出来,以便应用程序的其他部分无需关注。
目的是将数据存储检索机制与数据使用和操作分离。
好处:
我建议你在这里阅读: http://msdn.microsoft.com/en-us/practices/default.aspx
使用数据访问层(DAL)将有助于将数据访问与演示和业务逻辑隔离开。 我经常使用它,因此可以轻松地通过反射和动态加载程序集来交换数据提供程序。
阅读这里,有很多有用的信息。
另外,如果您计划使用.NET,请查看 Data Access Block ,它可以提供很大的帮助。