読者です 読者をやめる 読者になる 読者になる

え〜と、10行の例外処理と定型処理に囲まれた1行のメソッドがあるのですよ。
まぁこんな感じ?

<?php
    private function selectSimpleRowset(SearchCriteria_Interface $sc, DataAccess_Interface $da)
    {
        $sql = '';
        $this->beginProfiling();
        try {
            $result = $da->selectRowset($this->_db, $sc, $sql);
            $this->endProfiling();
            return $result;
        } catch (Exception $e) {
            $this->_logger->log_debug($e);
            // finallyがないのでこんなことをする
            $this->endProfiling($sql);
            throw $e;
        }
    }

で、大半のメソッドでは、

<?php
    public function selectBookDataRowSet()
    {
        $da = new daBookData;
        $sc = $da::createCriteria();
        $sc->setName('生徒会のヲタのしみ。');
        return $this->selectSimpleRowSet($sc, $da);
    }

    public function selectAutherDataRowSet()
    {
        $da = new daAuthorData;
        $sc = $da::createCriteria();
        $sc->setName('丸美甘');
        return $this->selectSimpleRowSet($sc, $da);
    }

ってやるだけでSQLのプロファイリングとか例外処理をかまして検索する処理を書けるのですが、たまにこのDataAccess_Interfaceの実装内で複数の検索実行を書くことになって(似たような一覧表出力をまとめて突っ込んであるとか)、そのときだけは、

<?php
    public function selectReleaseDailyListRowSet()
    {
        $da = new daBookData;
        $sc = $da::createCriteria();
        $sc->setReleaseMonth('2012-02-01');

        $sql = '';
        $this->beginProfiling();
        try {
            $result = $da->makeReleaseDailyList($this->_db, $sc, $sql);
            $this->endProfiling();
            return $result;
        } catch (Exception $e) {
            $this->_logger->log_debug($e);
            // finallyがないのでこんなことをする
            $this->endProfiling($sql);
            throw $e;
        }
    }

ってコピペで中身を実装していたのですよ。


で、ここまで1/3ほど実装が終わったデータ処理のうち5・6個のメソッドがこんな感じで、更に増えるのが確実なんですがこんなコピペ実装ないわ〜というアレです。
例外処理でくくるから切り出しが出来ないのがネックですよ、ええ。

定石としては、インターフェイスに宣言してあるメソッドの中で引数に応じて実行を切り分ける、とかなんでしょうが、呼び出し元からすれば折角わかりやすいメソッドが定義されてんのにそれを無理矢理共通メソッドに寄せる、ってのはなんか本末転倒って感じでなんともはや。