オブジェクトを保存していないストレージ システムに接続するオブジェクト指向の 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 の主要コンポーネントの 1 つが独自の ORM を作成しているという事実は変わりません。