CAKE(6)                      FreeBSD Games Manual                      CAKE(6)



NAME

     ふりぽけ日記 - 2001年07月上旬



SYNOPSIS

     cake [-vd] [garbage-in garbage-out]



DESCRIPTION

     Cakeは駄文製造プログラムです。一般に、ゴミを入力するとゴミを出力す

     る、とされています。



OPTIONS

     なにも指定をせずに立ち上げると、標準入力(/dev/ear)から読んで標準出

     力(/dev/mouth) に書こうとします。(放っておくと、ずっとそのままで入力を

     待っています。)入力ファイルと出力ファイルを指定すると、それらを読み書き

     します。



     -v オプションを指定すると、何をやっているのか細かく報告します。

     -d オプションはデバッグモードです。





2001.07.02 Mon :

   memo :



     UMLリファレンス(http://www.ogis-uml-university.com/reference/index.htm)





   画餅はいいものだ。 :



     画餅さえあえばあと10年は…(ごきゅ)



     リクエスト⇒レスポンスという単位で画面が遷移していく(和訳:ダサい)Webベ

     ースのアプリを作るに当たって、問題領域外のクラスをどういう考え方で設計し

     ていくかが自分的な課題だった。



     それが今日、

     UMLチュートリアル(http://www.ogis-uml-university.com/tutorial/index.htm)

     を読んでいたら、ひとつのユースケースについてひとつのコントローラーを配置

     すればいいと書いてあり、目からウロコ。



     そうすると、クライアントとアプリケーションの間でやりとりされるリクエスト

     ⇔レスポンスを、アクターからアプリケーションへ投げられるメッセージとその

     返り値という風に捉えて、ひとつの業務の流れについて、一つのコントローラが

     状態(=画面)の遷移をコントロールするという考え方になる。



     基底クラスWebAppControlerとかいうのを一つ作って、派生させてくるくる切替え

     るのがよさそう。:D





   WebAppControlerに必要とされる機能は… :



     クライアントからのリクエストデータを受け取る



     パラメータを解釈し、必要に応じてエンティティクラスのオブジェクトにデータ

     の処理メッセージを投げる。



     リクエストのパラメータと内部状態から、次の状態に遷移する。



     必要に応じてバウンダリクラス(各エンティティに対応したHTML生成用クラス)

     に依頼して具体的な表示内容を生成してもらい、クライアントにレスポンスを返

     す。



     …という感じ?

      うまく設計しないとゴチャゴチャ(和訳:手続き指向への世界にようこそ)にな

     りそうだな。



2001.07.06 Fri :

   うーむ :



     現在設計中の歌詞映写システムが、教会で毎週毎週の礼拝に使われ、末永く活用

     されることを考えると、使い勝手を中心にちょこちょこ手が入ることは間違いな

     い。



     そしてそのメンテナンスを担当するのは、確実に作った本人(つまり僕)。お気

     楽にスパゲッティなものを作ってしまえばツケは自分に跳ね返ってくるというわ

     けだ。



     現在テストコードをぼちぼち書いている。



     昨日までの作業で、Stateパターンを使って画面遷移をコントロールするところま

     では一応できた。





     <?php



     class Context {

       var $state;



       function Context() {

         $this->state = new State();

       }

       function request($fParm) {

         $this->state->handle($this, $fParm);

       }

       function setState($st) {

         $this->state = $st;

       }

     }



     class State { /* ABSTRUCT */ }



     /* ------------------------------------------------------------ */



     class TheApplication extends Context {

       var $userID;

       var $passwd;



       function TheApplication() {

         $this->state = new SystemStart();

       }



       function drawScreen($screen){

         require($screen);

       }



       function setuser($usr, $pass) {

         $this->userID = $usr;

         $this->passwd = $pass;

       }

       function unsetuser() {

         $this->userID = "";

         $this->passwd = "";

       }

       function isVaridUser() {

         if ($this->userID == "yama" && $this->passwd == "kawa")

           return true;

         else

           return false;

       }

     }



     // ユーザー情報を初期化し、ログイン画面を表示

     class SystemStart extends State {

       function handle($context, $fParm) {

         $context->unsetUser();

         $context->drawScreen("UserLogin.php");

         $context->setState(new UserLogin());

       }

     }



     // 入力されたユーザー名、パスワードが合っているかチェック

     // 合っていればシステムメニュー画面

     // 間違っていればエラー再ログイン画面を表示

     class UserLogin extends State {

       function handle($context, $fParm) {

         $context->setUser($fParm[0], $fParm[1]);

         if ($context->isVaridUser()) {

           $context->drawScreen("SystemMenu.php"); // 実際のページを呼び出す

           $context->setState(new SystemMenu());

         }

         else {

           $context->drawScreen("LoginInvalid.php"); // 実際のページを呼び出す

           $context->setState(new SystemStart());

         }

       }

     }



     // 押されたボタンによって、それぞれの業務画面を表示

     class SystemMenu extends State {

       function handle($context, $fParm) {

         :

         :

       }

     }



     /* ------------------------------------------------------------ */



     session_start();

     if (!isset($context)) {

       $context = new TheApplication();

       session_register("context");

     }

     $context->request($fParm);



     exit;



     ?>



     コンテキストオブジェクトをセッション変数に保存することで、一つのURLにアク

     セスするたびに画面は切り替わる。





SEE ALSO

     Top(1), PocketBSD(1), シュミプロ(1),

     ぽめれちょう掲示板(3),

     きまたま日記(6), 過去日記インデックス(1)



AUTHOR

     Cake(SHIMADA Keiki)



BUGS

     IE 4.0 以降や Netscape Navigator 6 以降などよりも、単純な VT 端末やライン

     プリンタからの出力のほうが見やすいかも知れません。





     この日記に書かれた内容が客観的に正しいという保証はありません。また、内容

     が予告なく変更されることもあります。



     Sorry, This page is English free.



nroff nikki system 0.01         August 6, 2001                               4