任何连接到任何不保存对象的存储系统的面向对象的 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 的事实。