Piece Framework ミニマムサンプル search 機能編

Piece Framework で実現する「検索→結果」+ページャ機能を有した最小限フローとして、なかなかすっきりしたものが出来たんじゃないかと思ってしまったのでちょこっと発表。あとで ITEMAN に叩いてもらうぜ ;)

まずステートチャート図はこちら。

20070208_01.png

これを Piece の YAML ファイルとして書くとこんな感じ。

firstState: DisplayForm

viewState:
  - name: DisplayForm
    view: Form
    activity:
      class: SearchMember
      method: setupForm
    transition:
      - event: search
        nextState: processSearching
        action:
          class: SearchMember
          method: search

  - name: DisplayResult
    view: Result
    activity:
      class: SearchMember
      method: viewResult
    transition:
      - event: turnNext
        nextState: processTurn
        action:
          class: SearchMember
          method: turnNext
      - event: turnPrevious
        nextState: processTurn
        action:
          class: SearchMember
          method: turnPrevious

actionState:
  - name: processSearching
    transition:
      - event: goDisplayForm
        nextState: DisplayForm
      - event: goDisplayResult
        nextState: DisplayResult
  - name: processTurning
    transition:
      - event: goDisplayResult
        nextState: DisplayResult

で、実際の PHP コードは以下のような感じ。

<?php
class SearchingUser extends Piece_Flow_Action
{
    function search()
    {
        $this->_criteria = new StdClass();
        $validation = &$this->_payload->getValidation();

        if ($validation->validate('SearchUser', $this->_criteria)) {

            $this->_limit = 100;
            $this->_criteria->offset = 0;
            $this->_criteria->limit  = $this->_limit;

            $this->_search();

            return 'goDisplayResult';
        } else {
            return 'goDisplayForm';
        }
    }

    function turnNext()
    {
        $this->_criteria->offset += $this->_limit;
        $this->_search();

        return 'goDisplayResult';
    }

    function turnPrevious()
    {
        $this->_criteria->offset -= $this->_limit;
        $this->_search();

        return 'goDisplayResult';
    }

    function viewResult()
    {
        $viewElement = &$this->_payload->getViewElement();
        $viewElement->setElement('results', $this->_results);
    }

    function _search()
    {
        $manager = new UserManager();
        $this->_results = $manager->search($this->_criteria);
    }
}
?>

あくまでミニマムな内容で、Pager 機構としてもとりあえずな動作のみ。ちなみに UserManager クラスは実際の検索を行う任意のドメインオブジェクト。

Piece_Unity 0.9.0 から追加された「アクション継続」によって、同フローが続いている限りアクションクラス内のプロパティ値が継続して保持され続けます。(それも特定ウィンドウ上の値であることが保証された状態で。)したがってコードも構成も極めて直感的でシンプルにまとまります。

トラックバック(0)

このブログ記事を参照しているブログ一覧: Piece Framework ミニマムサンプル search 機能編

このブログ記事に対するトラックバックURL: http://hatotech.org/mt-admin/mt-tb.cgi/641

コメントする

このブログ記事について

このページは、が2007年2月 8日 18:02に書いたブログ記事です。

ひとつ前のブログ記事は「Wii ゼルダの伝説 トワイライトプリンセス 終了」です。

次のブログ記事は「最近の光熱費が少々大変なことになってきている件」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01