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);
    }
&#91;/code&#93;

DBの更新処理、削除処理を抽象クラス内で実装する事で、
子クラスの実装をシンプルにできるようにしてある。
&#91;code  lang="php" line="23"&#93;
    // 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