私は、アプリケーションのオンラインステータスに応じて、mysql dbまたはxmlファイルにデータを書き込む必要があるWebアプリケーションを構築しています。私のモデルではPHP + MVC - 私のドメインモデルが混乱しています
、私は(ダオは、データアクセスオブジェクトである)のスーパークラスを持っている...今
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(の(ドメインモデル/エンティティクラスのみに関連する)二つの別々のローカル実装を含める必要があるところ、この)、またはこれは、違う?このアプローチは理にかなっています...私はシステムの外にシンプルさを取っているように私は感じ
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);
}
}
、または:ちょうど私がプロセスのうちの優雅さを取っているように、このような何かを行うことによって思えますそこには良いものがありますか?
おかげで、私はあなたの答えについて困惑している:ここに役立つかもしれないいくつかのビデオです。私のモデルはクラスを組み込んでいますが、単一のクラスではありません。上記のDaoクラスは、モデルレイヤの単なるコンポーネントです。私はまた、アプリ内のすべての主要プレーヤー(つまり、いくつかのdbテーブルから情報を引き出し、それらを単一のオブジェクトにマップする伝記的クラス)の属性とメソッドを統合するドメインオブジェクトを持っています。私はActive Recordについてあなたの意見を見ていますが、私はそれを実装しているとは思わないのです。私は上記のあなたの例のようにクラスにDBテーブルをラップしていません。 – fromabove