当前位置:  开发笔记 > 数据库 > 正文

DAL和ORM之间的界限在哪里?

如何解决《DAL和ORM之间的界限在哪里?》经验,为你挑选了3个好方法。

这些术语经常互换,并且显然有相当大的重叠,但同样似乎暗示人们看到一个强烈暗示的东西,说系统是一个ORM而不是它是DAL所暗示的.那是什么?如果有的话,区分这些类型系统的关键点是什么?

例如,假设我有一些代码实现了Database,Table,Column和Row类,通过自动分析现有数据库来填充它们,允许简化交互等等.它理解,实施并利用数据库实体(如外键)之间的结构关系.可以对所有实体模型进行子类化,以将特定于表的功能加载到它们上.

这个DAL到什么程度?ORM在多大程度上?为什么?



1> Steven A. Lo..:
ORM =对象关系映射

在ORM中,应用程序中的类/对象被映射到数据库表和操作以实现持久性,有时是自动的.

DAL =数据访问层

在DAL中,数据库操作隐藏在代码外观之后.

ORM是一种DAL,但并非所有DAL都是ORM.


不确定这对任何不知道它的内容的人都有所描述.DAL用户可以争辩说它将数据库表和操作映射到类和对象.ORM可以被视为隐藏在幕墙后面的东西.
@ [le dorfier]:DAL中没有要求将对象和类映射到表.DAL.RunSql("Select*from MyTable",rowCollection)是一个DAL,但不是ORM(严格意义上说).
自我注意:DAO是DAL的OOP形式.

2> matt b..:

我认为ORM能够将任何对象集映射到关系数据库; 而DAL特定于您的应用程序,并且可能无法自然地扩展为支持其他对象.

不仅如此,ORM还特别关注向/从数据库实体映射类,而DAL可能只是您访问数据库中数据的一种方式,无需任何映射.



3> Ty...:

任何面向对象的DAL连接到任何不保存对象的存储系统都会实现ORM.ORM通常被理解为类似于Hibernate的东西,但重要的是处理阻抗不匹配.

[扩展]

在数据级别,当您将一种类型(关系)的数据映射到另一种类型(OO)的数据时,会发生阻抗不匹配.

例如,您在DAL中看到过多少次这样的线?

db.AddInParameter(dbCommand, "Name", DbType.String, name);

或者另一边

customerId = Convert.ToInt64(dr["CustomerID"].ToString());

映射原始数据类型时会出现许多问题.

在对象级别,您的DAL应该返回您打算使用的结构.无论是某种业务对象还是一堆原始数据.你自己的DAL和ORM都需要处理这个问题.

在设计级别,您构造的对象反映了您存储的数据.因此可能出现结构差异.这些也在ORM解决方案中为您处理,但您将被迫在DAL中执行相同操作.例如,在你的OO代码中,实现正确的继承会很好,但是这并不容易转换成关系的东西.

我只是想指出,ORM是一个用来推动产品的术语,它可以自动化你在DAL中必须做的很多事情.ORM解决方案将使生活更轻松,并提供大量的质量/性能优势.但这并没有改变DAL的一个主要组件是创建自己的ORM这一事实.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有