Djember クラス設計その2
前回の続き。
抽象クラスの実装について。
basebeanクラス
コンストラクタでDB接続やその他の設定を行う。
<?php require_once('config.php'); // データビーンの抽象クラス abstract class basebean { protected function __construct() { // DB接続 $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if (!$link) { die('接続失敗です。'.mysql_error()); } // DB選択 $db_selected = mysql_select_db(DB_NAME, $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } // 文字コード設定 mysql_set_charset(DB_CHARSET); } [/code] DBの更新処理、削除処理を抽象クラス内で実装する事で、 子クラスの実装をシンプルにできるようにしてある。 [code lang="php" line="23"] // insert/update実行 public function regist_data() { if ($this->get_id() == '') { $sql = $this->get_insert_sql(); } else { $sql = $this->get_update_sql(); } //SQL実行 $result = mysql_query($sql); if (!$result) { die('クエリーが失敗しました。'.mysql_error().'['.$sql.']'); } // insertの場合はidを取得 if ($this->get_id() == '') { $this->set_id(mysql_insert_id()); } return $result; } // delete実行 public function delete_data() { $sql = $this->get_delete_sql(); //SQL実行 $result = mysql_query($sql); if (!$result) { die('クエリーが失敗しました。'.mysql_error().'['.$sql.']'); } return $result; }
DBの更新処理に必要なメソッドを抽象化(abstract)しておき、実装を強制させる。
なお、validateとerror_initは抽象化させる必要はないけれど、
子クラスの実装を統一化させる意味で抽象化させている。
// insert文取得 abstract protected function get_insert_sql(); // update文取得 abstract protected function get_update_sql(); // delete文取得 abstract protected function get_delete_sql(); // key取得 abstract public function get_id(); // key設定 abstract public function set_id($id); // 入力チェック abstract public function validate(); // エラー初期化 abstract protected function error_init(); } ?>
basebeanfactoryクラス
select文の生成に必要なWhere句、OrderBy句のsetter、getterを実装している。
Where句は条件付検索を並び替えたり、ページングをした時のために保持している。
コンストラクタの役割はbasebeanクラスと同様。
<?php require_once('config.php'); require_once('function.php'); // データビーン生成の抽象クラス abstract class basebeanfactory { var $condition = ''; var $order = ''; public function set_condition($condition) { $this->condition = $condition; } public function get_condition() { return $this->condition; } public function set_order($order) { $this->order = $order; } public function get_order() { return $this->order; } protected function __construct() { // DB接続 $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if (!$link) { die('接続失敗です。'.mysql_error()); } // DB選択 $db_selected = mysql_select_db(DB_NAME, $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } // 文字コード設定 mysql_set_charset(DB_CHARSET); }
OrderBy句のgetterの拡張。
get_order_nextは指定された並び替え項目($order)が前回と同じなら、
“desc” をつけて降順に切り替えている。
public function get_order_next($order = '') { if ($this->order == $order && $order != '') { // 同じorderなら、並び順を入れ替え return $this->order.' desc'; } else { return $order; } } protected function get_order_condition() { if ($this->order != '') { return ' order by '.$this->order; } else { return ''; } }
最後に抽象メソッド。
get_dataは本当は親クラスで実装しておきたかったんだけど、
生成するbeanクラスがモノによって異なったり、
SQLの生成処理が異なったりするので、抽象メソッドとしてある。
この辺はまだ工夫の余地があるかもね。
// select文取得 abstract protected function get_select_sql(); // select実行 abstract public function get_data(); } ?>
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント