私の質問は、アプリケーションのモデル層からデータベース接続をどのように抽象化するのですか? 主な関心事は、さまざまな種類のデータベースから簡単に変更できるようにすることです。おそらく、コンマ区切りのフラット ファイル データベースから始めることになるでしょう。次に、SQL データベースに移動します。その後、LDAP 実装の方が優れていると判断します。このようなことを簡単に計画するにはどうすればよいでしょうか。
簡単な例として、名前、姓、電子メールを持つユーザーがいるとします。これを表す非常に単純な PHP クラスは次のようになります (パブリック インスタンス変数の問題は無視してください)。
<?php
class User {
public $first;
public $last;
public $email;
}
?>
SQLが埋め込まれたDAOクラスを持っている人をよく見てきました。
<?php
class UserDAO {
public $id;
public $fist;
public $last;
public $email;
public function create( &$db ) {
$sql = "INSERT INTO user VALUES( '$first', '$last', '$email' )";
$db->query( $sql );
}
}
?>
このような戦略に関する私の問題は、データベースを変更したい場合、新しいタイプのデータベースに対処するために、すべての DAO クラスの作成、更新、ロード、削除関数を変更する必要があることです。それらを自動生成するプログラムを持っている場合でも (私は特に好きではありません)、このプログラムを編集して機能させる必要があります。
これを処理する方法についての提案は何ですか?
私の現在の考えは、独自の作成、削除、更新、ロード機能を持つ DAO オブジェクトのスーパー クラスを作成することです。ただし、これらの関数は DAO の属性の配列を取得し、クエリ自体を生成します。このように、SQL は複数のクラスに分散するのではなく、SuperDAO クラスにのみ存在します。その後、データベース層を変更したい場合は、SuperDAO クラスがクエリを生成する方法を変更するだけで済みます。利点?短所は?予見可能な問題?良い点、悪い点、醜い点は?