Piece Framework ミニマムサンプル search 機能編
Piece Framework で実現する「検索→結果」+ページャ機能を有した最小限フローとして、なかなかすっきりしたものが出来たんじゃないかと思ってしまったのでちょこっと発表。あとで ITEMAN に叩いてもらうぜ ;)
まずステートチャート図はこちら。
これを 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

コメントする