全然理解はできていないので、あくまで連想したことです。
MVCは1リクエストに対して1リスポンス
自分の理解では、ウェブ・アプリケーションでのMVCとはリクエストに対してリスポンスを返すためのデザインパターンであること。MVCについては、MOVEやらCが太るとか言われてますが、基本的にはhttpの仕組み上、この考え方は理にかなっていると思う。
ただ、人間が操作する場合を考えると、MVCだと何かが足りない気がする。
非常に単純なケースとして、新規データの登録を考えてみる。
1)フォームを表示(form)、
2)入力されたデータの確認画面(confirm)、
3)データベースに登録(insert)、
という流れで処理が行われていると思う。
実際には、もうちょっと複雑なことが多い気がする。
さて、MVCだと、上の処理を3回に分けて記述する。
一つ一つの処理は理解しやすいのだけど、流れとして見た場合に処理のつながりが追いかけにくい。と思う。
Interactionをコードにする
DCIだと、どうなるのだろう?こういった処理(インターアクション)をコードとして記述しましょう。
という事らしい。
早速擬似コーディング。
こんなかんじかな。
function add_entity( $action, $ctrl, $view )
{
$role = $ctrl->getRole( 'entity' );
if( $action == 'form' ) {
return $view->showForm( $role );
}
$ok = $ctrl->verifyInput( $role );
if( !$ok ) {
return $view->showForm( $role );
}
if( $action == 'confirm' ) {
$view->setToken( $ctrl->getToken() );
return $view->showConfirm( $role );
}
if( $action == 'insert' && $ctrl->tokenOk() ) {
$role->insert();
$role->vanish();
}
return $view->showDone( $role );
}
実際に操作する対象は「entity」。
それをRoleで包んでいる。この例だと、単にActiveRecord化してる。
さて、$actionは「form」「confirm」「insert」と進んでゆく。
$view->showForm()からは「confirm」をアクションとして、
$view->showConfirm()からは「insert」をアクションとして、
呼び出す。
そして、すべてのアクションで同じ処理(add_entity)が走る。
どうだろう?
これだと何が起きているのか、分かりやすいと思う。
まぁ、ちゃんと動くのが前提ですが。
0 件のコメント:
コメントを投稿