アプリケーションのオンライン状態に応じて、mysql db または xml ファイルにデータを書き込むことができる必要がある Web アプリケーションを構築しています。
私のモデルには、スーパー クラス (Dao はデータ アクセス オブジェクト) があります...
abstract class Dao {
static function getInstance($online_status) {
if $online_status = 'online' {
return new DaoMySQL;
} else {
return new DaoXML;
}
}
abstract function dao_select();
abstract function dao_insert();
abstract function dao_update();
abstract function dao_delete();
}
さて、ここが私が混乱している部分です。以下を使用して適切な Dao を選択するドメイン モデル/エンティティ クラスがあります。
$this->dao = Dao::getInstance($online_status);
これで、正しいデータ アクセス オブジェクトが選択されました。しかし、問題はまだ dao_select() と他の関数の 2 つの実装です。現在、主な実装は DaoMySQL と DaoXML のそれぞれのクラスにありますが、これらの各クラスの dao_select() には異なるものが必要です。つまり、DaoMySQL バージョンには、$table と $where_statement の 2 つのパラメーターが必要です。DaoXML (私は実装していません) には要素名が必要で、別の引数が必要になるかもしれませんが、わかりません。
したがって、私のドメインモデルクラスでは、呼び出した後
$this->dao = Dao::getInstance($online_status);
これは、dao_select() の 2 つの別個のローカル実装 (ドメイン モデル/エンティティ クラスのみに関連する) を含める必要がある場所ですか、それとも間違っていますか? 次のようなことを行うことで、プロセスからエレガンスを取り除いているようです。
class EntityModel {
$this->dao = Dao::getInstance($online_status);
if($this->dao->type = 'mysql') {
$result = $this->dao->dao_select($table, $where);
} else {
$result = $this->dao->dao_select($xml_params);
}
}
システムからシンプルさを取り除いているような気がします... このアプローチは理にかなっていますか、それとももっと良いアプローチがありますか?