データベース抽象化レイヤーとデータアクセスレイヤーの違いは何ですか?

StackOverflow https://stackoverflow.com/questions/2838661

質問

実は私は3層構造にはまってしまいました。インターネットをサーフィンすると、「データベース抽象化層」と「データ アクセス層」という 2 つの用語を見つけました。

両者の違いは何ですか?

役に立ちましたか?

解決

私の理解では、データアクセス層は、データベース実際に抽象ず、むしろ簡単に構築するデータベース操作や問い合わせを行うこと。

であります

たとえば、データアクセス層は、通常、まだ書き込むために、データベースの構造の知識を必要とするSQL構文に非常によく似たAPIを持っています:

$Users->select('name,email,datejoined')->where('rank > 0')->limit(10);

データ抽象化層は、理論的には任意の基礎となるデータベースの構造を理解する必要性を防止またはSQLの知識を持っていることを、通常は本格的なORMの(オブジェクト・リレーショナルマッパー)です。構文は次のようなものかもしれません。

Factory::find('Users', 10)->filter('rank > 0');

そして、すべてのオブジェクトは完全にあなたが道というように設定している場合、おそらく任意の親や子オブジェクトと結合、すべてのフィールドが移入される場合があります。

しかし、この抽象化は価格が付属しています。私は個人的にORMの教義などを見つけたり、不要と非効率的であることを推進します。ほとんどの場合、単純なデータアクセス層ではなく、いくつかのシンタックスシュガーのためのアプリケーションのパフォーマンスを破壊するので、特別な注意が必要です何のためのマニュアルSQLで、罰金を行います。私はもうそれにはなりませんので、この領域はかなり白熱した議論である。

あなたはデータのベースの抽象化レイヤを意味している場合、

、それはあなたのコードは、データベース・ベンダーのより多くのために使用することができるように、PDOの線に沿って何かだろう。 PDOは、私は信じて、他の人の間でのMySQL、PostgreSQLそしてmysqliのと連動しています。

他のヒント

データアクセス層=作成、読み取り、更新、削除(CRUD)操作のアプリケーションドメインに固有の

接続のようなデータ抽象化レイヤ=行い、一般的なデータベース操作、コマンド、パラメータは、ベンダー固有のデータライブラリからあなたを絶縁し、関係なく、あなたがなどのMySQLは、Microsoft SQL ServerやOracle、DB2を使用するかどうかのデータにアクセスするための一つの高レベルAPIを提供..

ウィキから:

データアクセス層

コンピューターソフトウェアのデータアクセスレイヤー(DAL)は、エンティティ関連データベースなど、何らかの種類の永続的なストレージに保存されているデータへの簡素化されたアクセスを提供するコンピュータープログラムのレイヤーです。

たとえば、DALは、データベーステーブルのフィールドの行の代わりに属性を備えたオブジェクトへの参照を(オブジェクト指向プログラミングの観点から)返す場合があります。これにより、クライアント(またはユーザー)モジュールをより高いレベルの抽象化で作成できます。この種のモデルは、対応するデータベースストアドプロシージャのセットを直接参照するデータアクセスメソッドのクラスを作成することで実装できます。別の実装は、ファイルシステムへのまたはファイルシステムからレコードを取得または書き込みできる可能性があります。DALは、外部の世界から基礎となるデータストアのこの複雑さを隠しています。

たとえば、挿入、削除、更新などのコマンドを使用してデータベース内の特定のテーブルにアクセスする代わりに、データベースにクラスといくつかのストアドプロシージャを作成できます。手順は、クラス内のメソッドから呼び出され、要求された値を含むオブジェクトを返します。または、挿入、削除、および更新コマンドは、データアクセスレイヤー内に保存されているレジスタユーザーやログーザーなどの単純な関数内で実行できます。

つまり、基本的な CRUD 機能/ロジック 永続層/ストレージ層にプッシュ/プルするビジネス オブジェクトがここに当てはまります。ほとんどの場合、これだけで十分でしょう。 ORMマッピング、モデルのビジネスオブジェクトのインターフェースなど ここに落ちます。

データベース抽象化レイヤー

データベース抽象化レイヤーは、コンピューターアプリケーションとSQL Server、DB2、MySQL、PostgreSQL、Oracle、SQLiteなどのデータベースとの間の通信を統合するアプリケーションプログラミングインターフェイスです。従来、すべてのデータベースベンダーは、製品に合わせた独自のインターフェイスを提供し、アプリケーションプログラマに任せて、サポートしたいすべてのデータベースインターフェイスにコードを実装しています。データベースの抽象化レイヤー開発者に一貫したAPIを提供することにより、作業量を減らし、このインターフェイスの背後にあるデータベースの詳細を可能な限り非表示にします。多数のプログラミング言語に異なるインターフェイスを持つ多くの抽象化層が存在します。

基本的に、これは追加の抽象化レイヤーです。 クラッド ベンダーに依存しないインターフェースを使用せず、さまざまなデータベース ベンダーの実装の詳細について心配する必要がなくなりました。これは、複数のデータベースをサポートする場合にのみ必要になります。 ORM、Micro ORM、ラッパー、汎用ドライバー クラス、名前は何でも、など 接続の確立、パラメータの処理、実行などを扱うものがここに分類されます。これは、永続化/ストレージ層の直前に追加された層にすぎません。3 層の用語では、これらの層は論理的に分離されていないため、両方の層が 1 つに分類されます。


要約すると、DAL はデータに関するものであり、DbAL はデータベースに関するものです。DAL は操作を定義し、DbAL は操作します。DAL は、実際の Db のすぐ後ろにある DbAL の後ろにあります。DAL は DbAL を呼び出します。DAL は、ビジネス ロジック (モデル内の) を CRUD ロジックから分離するのに適していますが、DbAL が必要になることはほとんどありません (しかし、私は DbAL が大好きです)。DAL はより高レベルの設計マッピングであり、DbAL はより低レベルのアーキテクチャと実装です。どちらも責任を分離します。ORM は、両方を行う大規模な構造です。ORM を使用するときにそれらをどのように分離するかわかりません。ORM がすべてを処理してくれるため、その必要はありません。理想的には、いずれにしても、1 つのプロジェクトに DAL を配置し、Db とその操作を分離する意味がないため、単純に永続層と呼ぶ別のプロジェクトに DbAL を配置します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top