数据访问层的目的是什么?
我很久以前开始了一个项目,并在我的解决方案中创建了一个数据访问层项目,但从未开发任何项目。数据访问层的目的是什么?有什么好的资料可以让我更多地了解数据访问层吗?
解决方案
回答
我建议我们在这里阅读:http://msdn.microsoft.com/zh-cn/practices/default.aspx
使用DAL将将数据访问与演示和业务逻辑隔离。我经常使用它,以便可以轻松地交换(通过反射和动态加载程序集)数据提供程序。
阅读,那里有很多很好的信息。
另外,如果我们打算使用.NET,请查看"数据访问块"。这可能是一个很大的帮助。
回答
数据访问层遵循"关注点分离"的思想,其中,业务逻辑与数据层(数据库)进行交互所需的所有逻辑都被隔离为一组单独的类(层)。这使我们可以更轻松地更改后端物理数据存储技术(例如,从XML文件移至数据库,或者从SQL Server移至Oracle或者MySQL),而不会对应用造成很大的影响(如果正确执行,则为零影响)商业逻辑。
有很多工具可以构建数据层。如果搜索短语"对象关系映射器"或者" ORM",则应找到一些更详细的信息。
回答
DAL应该从项目的其余部分中抽象出数据库-基本上,除DAL之外,任何代码中都不应包含SQL,并且只有DAL应该知道数据库的结构。
目的主要是使应用程序的其余部分与数据库更改隔离开来,并使其更易于扩展和支持应用程序,因为我们将始终知道在何处修改数据库交互代码。
回答
用两个词:松耦合
为了保持用于从数据存储(数据库,平面文件,Web服务等)中提取数据的代码与业务逻辑和表示代码分离。这样,如果我们必须更改数据存储,就不必重写整个内容。
如今,各种ORM框架都在将DAL与其他层混合在一起。这通常使开发更容易,但是更改数据存储可能会很痛苦。公平地讲,像这样改变数据存储并不常见。
回答
目的是抽象出应用程序其他部分不需要关注的数据库访问详细信息。
回答
数据访问层用于从其表示中抽象出数据的存储和检索。我们可以在1994年的《设计模式》中了解有关这种抽象的更多信息。
回答
目的是从数据使用和操作中抽象出数据存储检索机制。
好处:
- 基础存储可以更改(例如,从Oracle切换到MSSQL),并且我们需要一种本地化这些更改的方法
- 模式更改-参见上文
- 我们想要一种与数据库断开连接的方式(演示模式):将文件序列化/反序列化添加到DAL中
回答
当应用程序的许多不同部分需要以相同的方式访问数据时,数据访问层就显得很有道理。
当我们需要以许多不同的方式访问相同的数据时,这也很有意义。例如,文字处理器如何读取许多不同的文件类型并将其无提示地转换为应用程序的内部格式。
请记住,DAL也可能会适得其反。如果我们要构建一个对数据访问性能至关重要的系统,那么将其与业务逻辑分开可能会使一些重要的优化变得不可能。
回答
数据访问层有两个主要目的
- 提取实际的数据库引擎或者其他数据存储,以便应用程序可以从使用Oracle切换到使用MS SQL Server
- 抽象逻辑数据模型,以使业务层与该知识脱钩并且不可知。使我们能够在不影响业务层的情况下修改逻辑数据模型
这里的大多数答案都提供了第一个原因。在我看来,第二个更为重要。本质上,业务层不应该知道所使用的逻辑数据模型。如今,使用ORM和Linq#2似乎不见了,人们倾向于忘记(或者看不到确实存在且应该存在的细线)关于#2.
本质上,为了更好地理解数据层的目的和功能,我们需要从业务层的角度看待事情,同时要记住,业务层应该与数据存储的逻辑数据模型无关。
因此,例如,每当业务层需要数据时,是否应该以一种非常简单的逻辑数据模型不可知的方式来请求它所需要的数据。因此它将调用数据访问层,例如:
GetOrdersForCustomer(42)
并且它准确地获取所需的数据,而无需知道存储该信息的表或者存在的关系等。
我已经在我的博客上写了一篇文章,其中介绍了更多细节。
数据访问层的目的和功能