Road to guesswork

さて、「高い保守性を維持しつつ、PHPで楽にコーディングしたい」をテーマにしたPHP用MVCフレームワーク「guesswork」のご紹介です(まだダウンロードはできませんです)。

基本はActionベースで、1つのスクリプトで1つのActionクラスを定義する形になります。最もシンプルな形のスクリプトは以下のようになります。

<?php
define("GUESSWORK_DIR", "/path/to/guesswork");
require_once GUESSWORK_DIR . "Guesswork.php";

class RegistrationAction extends AbstractAction { // デフォルトで実行される処理 function execute_default() { $this->setTemplate("registration_input.tpl"); return GW_SUCCESS; } }

$config = array( "template_dir" => ROOT_DIR . "smarty/templates/", "compile_dir" => ROOT_DIR . "smarty/templates_c/", "config_dir" => ROOT_DIR . "smarty/configs/", "cache_dir" => ROOT_DIR . "smarty/cache/", "dbparams" => "host=localhost dbname=foo", );

$controller = new Guesswork(); $controller->setConfiguration($config); $controller->setActionClass("RegistrationAction"); $controller->addInterceptor("*", new ParametersInterceptor()); $controller->dispatch();

exit; ?>

コントローラの起動までを各スクリプト中に記述するようになっているため、このファイル単独で動作します。Strutsのように一カ所でリクエストを受けてからActionを実行するモデルではありません。このような構造になっているため、他のサーバ上で実行させたい場合もguessworkさえインストールしてあれば、スクリプトをコピーするだけで動きます。また、設定項目はスクリプト中に記述するようになっているので、設定ファイルの類もありません。

guessworkのActionクラスでは、定義されているメソッド名によって動作が変わります(guessworkは当て推量という意味)。デフォルトではexecute_default()というメソッドが呼ばれますが、$_GET["mode"]または$_POST["mode"]が送信された場合にはその値に対応するexecute_xxx()が呼び出されます。つまりユーザー登録用のActionであれば、

execute_default() // 登録フォーム表示
execute_confirm() // 内容確認フォーム表示
execute_commit()  // データベース更新&結果表示

のようなメソッドを定義するようになります。

各メソッドで共通の初期化処理(インスタンス変数の初期化など)を記述する場合はinit()というメソッドを定義しておくと、execute_*()の実行前に自動的に呼び出されるようになります。

init()            // 共通の初期化処理
execute_default() // 登録フォーム表示
execute_confirm() // 内容確認フォーム表示
execute_commit()  // データベース更新&結果表示

また、特定のmodeの場合のみ実行したい初期化処理というものもよくあります。例えば「登録フォーム表示前はデータベースから都道府県一覧を取得しておきたいが、confirm時やcommit時には処理をしない」というケースです。こういった場合には、prepare_default()というメソッドを定義しておくと、execute_default()が実行される場合のみ直前にprepare_default()が呼び出されます(当然、prepare_confirm()やprepare_commit()というメソッドも定義できます)。

init()            // 共通の初期化処理
prepare_default() // 登録フォーム表示前の処理
execute_default() // 登録フォーム表示
execute_confirm() // 内容確認フォーム表示
execute_commit()  // データベース更新&結果表示

これでActionの骨組みが出来たので、あとは各メソッドの中身を実装して、Smartyによるテンプレートファイルを用意すれば実装は完了となります。

で、肝心のguessworkが何処で入手できるかということですが…、まだ準備中なんです。すみません。

OZACC.blog, 6 月 25th, 2004 at 23:09 [Trackback]

guesswork

BMediaNode - weblog: Road to guesswork 「高い保守性を維持しつつ、PHPで楽にコーディングしたい」をテーマにしたPHP用MVCフレームワーク「guesswork」のご紹介です(まだダウンロードはできませんで…


使用可能なタグ <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>