ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

Webにおける画面とプログラムの分離を単純に行い、わざと問題点をだしてみる。


 先ほどのブログにあった、Webプログラム(PHPなど)における画面とプログラムの分離を、規約によって行う方法について、ものすごーい単純な規約を使って、わざと問題点をだしてみます。

 この程度なら、たぶんテンプレートを使ったほうがよいと思われるでしょう。

 実際は、このやり方とは、違うやり方をします(それは、次回以降のブログで説明する)。

 ただし、このやり方を説明しておかないと
・あまりに唐突なやり方になってしまう。
・今回説明する方法でいいのでは?という意見が出る
ために、前もって説明しておいてしまいます。




 単純に、PHPとか(まあ、CGIでもJSPでもいいんだけど)で、画面と、プログラム部分を分離しようとすると、つまり、MVCモデルを実現しようとすると、こんなことでできます。

(1)画面部分は、
・コントロール部分のソースをインクルードする
・そこで、コントロールのモジュールを呼び出す
・(画面表示の値は、コントロール側でどこかにセットしておき)
  画面表示では、表示するだけにする。

(2)コントロール側では
・呼び出されるモジュールをつくり、そこで、モデルを呼び出す
・表示する値が求まったら、画面表示の値をどこかにセットする。




 今回は、画面表示の値を入れておくところを、セッションとしましょう
(セッション以外でもぜんぜんかまわないんだけど、次回以降の話のために、セッションに入れる)

そうすると、規約としては、

(1)画面表示側
・プログラム名はXXXX.PHP
・はじめに、コントロールのインクルードをして、次の行で、XXXX_cnt_init()を呼び出す。
・値を表示するためのプログラムしか、書いては、いかん。
 クリックされたら、ある処理を動かしたい場合、動かす処理を、XXXX_shoriYY(ひきすう)YYは数字という関数を呼び出すようにして、その関数は、コントロールファイルの中に書くようにする。

 値表示は、
  文字、数字のように、1項目に1つの値のときは、print $_SESSION['項目名']で
  表のように、1項目につき、複数行あり、その行が、複数のカラムを持つ場合は、
  foreach($_SESSION['項目名'] as $rec)で、1行分を$recの中にいれ
   各行につき、 print $rec['カラム名']で表示する
  リストのように、1項目につき、複数の値あるときは、表で、複数行、1カラムしかないものとして処理する。

(2)コントロール側は、
・プログラム名はXXXX_cnt.PHP
・XXXX_cnt_init()という関数を作成し、その関数の中で、セッションをスタートし、セッションの中に、表示させたい値を入れる。値の設定の仕方は、上記のとおり。
・もし、それ以外に、画面のほうで、関数を呼び出したいときには、ここにその関数を書く




ひえー、時間がなくなっちゃったんで、具体的例は、またこんど。

で、これの問題点。

いろいろあるけど、時間ないので、致命的なのを1個だけ。
エラー画面を表示したいときなどに別画面に遷移させにくい(させると、プログラム複雑になる)

この問題を解決した方法を、今度、書こうと思っています。

なずけて、カオル姫方式。

時間がないので、このへんで。