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個だけ。
エラー画面を表示したいときなどに別画面に遷移させにくい(させると、プログラム複雑になる)
この問題を解決した方法を、今度、書こうと思っています。
なずけて、カオル姫方式。
時間がないので、このへんで。