Djember クラス設計その2

前回の続き。
抽象クラスの実装について。

basebeanクラス

コンストラクタでDB接続やその他の設定を行う。
[code lang=”php” line=”1″]
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;
}
[/code]

DBの更新処理に必要なメソッドを抽象化(abstract)しておき、実装を強制させる。
なお、validateとerror_initは抽象化させる必要はないけれど、
子クラスの実装を統一化させる意味で抽象化させている。
[code lang=”php” line=”52″]
// 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();
}
?>
[/code]

basebeanfactoryクラス

select文の生成に必要なWhere句、OrderBy句のsetter、getterを実装している。
Where句は条件付検索を並び替えたり、ページングをした時のために保持している。
コンストラクタの役割はbasebeanクラスと同様。
[code lang=”php” line=”1″]
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);
}
[/code]

OrderBy句のgetterの拡張。
get_order_nextは指定された並び替え項目($order)が前回と同じなら、
“desc” をつけて降順に切り替えている。
[code lang=”php” line=”39″]
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 ”;
}
}
[/code]

最後に抽象メソッド。
get_dataは本当は親クラスで実装しておきたかったんだけど、
生成するbeanクラスがモノによって異なったり、
SQLの生成処理が異なったりするので、抽象メソッドとしてある。
この辺はまだ工夫の余地があるかもね。
[code lang=”php” line=”54″]
// select文取得
abstract protected function get_select_sql();
// select実行
abstract public function get_data();
}
?>
[/code]

コメント

タイトルとURLをコピーしました