2009-02-24 4 views
33

これらの用語は、しばしば互換性をもって投げ捨てられ、明らかにかなり重複していますが、システムがDALであることによって暗示されていないORMであると強く暗示しているように見えます。それは何ですか?これらのタイプのシステムを区別する重要なポイントは何か、もしあれば、それは何ですか?DALとORMの間の線はどこですか?

たとえば、データベース、テーブル、列、および行クラスを実装し、既存のデータベースの自動分析によってデータを入力し、単純な対話などを許可するコードがあるとします。外部キーなどのデータベースエンティティ間の構造的関係を理解し​​、実行し、活用します。すべてのエンティティモデルをサブクラス化して、テーブル固有の機能をそれらにロードすることができます。

これはどの程度ですか? ORMはどの程度ですか?どうして?

+0

@chaos - なぜ特殊用語タグ?? DALとORMは完全に細かい技術的頭字語です –

+0

@DJ:用語に間違った*があることを暗示するために「専門用語」を使用するつもりはありません。 Rich Bの奇妙な再タグ付けの復讐者の別の傍観者が示唆しているように、私はhttp://en.wikipedia.org/wiki/Jargonの案内を受けようとしています。 – chaos

+0

コンピュータ用語は外部から専門用語と呼ばれることがありますが、ここではすべてのソフトウェア専門家がいます。これは専門用語ではありません。そうでなければほとんどすべての記事は専門用語 –

答えて

49

ORM =オブジェクトリレーショナルマッピング

、アプリケーションのクラス/オブジェクトは時々自動的に、永続性のためのデータベーステーブルと操作にマッピングされます。

DALでDAL =データ・アクセス・レイヤー

は、データベース操作は、コードファサードの背後に隠されています。

ORMはDALの一種ですが、すべてのDALがORMであるとは限りません。

+0

良いORMは、そのDALnessをすべて見えないようにします。 – yfeldblum

+10

これは、それが何を言っているのか分からない人に何かを記述しているかわかりません。 DALユーザーはデータベーステーブルと操作をクラスとオブジェクトにマップすると主張できます。 ORMはファサードの背後に隠れているものと見ることができます。 – dkretz

+3

@ [le dorfier]:オブジェクトとクラスをテーブルにマップする必要はありません。 DAL.RunSql( "Select * from MyTable"、rowCollection)はDALですが、厳密にはORMではありません。 –

7

私はORMが任意のオブジェクトのセットをリレーショナルデータベースにマッピングできると思います。 DALはアプリケーション固有のもので、おそらく他のオブジェクトをサポートするために自然に拡張することはできません。

ORMは具体的にはマッピングのデータベースエンティティとの間のクラスに関係していますが、DALはマッピングなしでデータベース内のデータに簡単にアクセスできる方法です。 ORMで

3

プログラミングを開始したときにORMが存在しませんでした。最初のORMが出てきたら、DALを作成するための外部ツールでした。今、DALとORMが混在しています。そのため、多くの開発者が同義語を同義語として使用しています。

DALとして機能する最もよく知られているORMの例は、NHibernateです。その他の例は、SubsonicとCSLA.NETです。これらはすべて.NETツールです。 IIRC、ORMツールはJavaの世界で始まりました。他のテクノロジスタックは、Javaが行ったことをコピーしました。

5

オブジェクトを保存していないストレージシステムに接続するオブジェクト指向の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を作成しているという事実を変えるものではありません。

+0

インピーダンスの不一致の処理を拡張できますか? – chaos

関連する問題