4

重複の可能性:
データ抽象化レイヤーとデータ アクセス レイヤーの違いは何ですか?

nettuts に関するこの記事を読んだところです。私はちょっと混乱しました。データ アクセス レイヤーデータベース アブストラクション レイヤーの違いは何ですか?

また、これには独自のカスタマイズされたクラスを作成する必要がありますか、それとも PDO を使用する方がよいでしょうか?

DatabaseOpsすべての CRUD 操作を実行するクラスがあります。他のクラス (例: ユーザー) はそれを継承し、このクラスのメソッドを使用して CRUD アクションを実行します。接続を開く、接続を閉じる、配列をフェッチする、クエリを確認するなどの名前の別のクラスがDatabaseあります。それらを単一のクラス (データ アクセス/抽象化レイヤー) に書き込む必要がありますか? どちらが良いでしょうか?

4

2 に答える 2

7

通常、データ アクセス層は ORM の形式をとります。これにより、テーブルをオブジェクトにマップできます。高レベルの抽象化を提供するため、必ずしも生の SQL について心配する必要はありません。 http://en.wikipedia.org/wiki/Data_access_layer

データ抽象化レイヤーは、データ アクセス バックエンドを独立させる API を作成します。postgres、mysql、sqlite などを使用しているかどうか。詳細を気にすることなく、これらのデータベースにクエリを実行できます。 http://en.wikipedia.org/wiki/Database_abstraction_layer

他の人が使用できるプラットフォームを作成していて、他の人がデータベース バックエンドを選択できる場合は、抽象化レイヤーが必要になりますが、それ以外の場合は心配しません。

Web プロジェクトの構造について質問があるときはいつでも、よく使われている MVC フレームワークを調べて、これらの問題がどのように処理されているかを確認します。CakePHP、CodeIgniter、Kohana はすべて、拡張可能なオブジェクト指向フレームワークを作成する方法の優れた例です。このような質問に関しては、これらは不可欠なリソースです。

于 2012-02-13T16:12:32.167 に答える
2

私は完璧なプログラマーではありませんが、私が見たり学んだことから、責任を分離することが重要です。これが、抽象化レイヤーが非常に厳しく教えられている理由です。

これは私がそれを見る方法です。これらの質問をする...

  1. 常に 1 種類のデータベースのみを使用しますか?
  2. 複数のタイプのデータベースを使用する予定がある場合 (または、単に構成が簡単なプロジェクトを作成することを計画している場合...これをお勧めします)、すべてのデータベース コマンド (CRUD を含む) は、アクセス、削除に対して同じ構文を使用します。 、挿入中…?(そうではない可能性があります)

私の意見では、これらの質問に答えなければならない場合、2 つのクラスを一緒にします。そうすれば、データベースが変更された場合でも、2 つの異なるクラスを作成する代わりに、アクセス コマンドと CRUD コマンドを持つ新しい抽象化レイヤーを簡単に追加して呼び出すことができます。

PS 素晴らしい質問です! +1

于 2012-02-13T16:12:58.943 に答える