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

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

PHP等で画面とプログラムを分離する(処理結果で画面分け:カオル姫方式)

2005-11-22 17:35:04 | PHP

 実際に、画面とプログラムを分離する際、プログラムの処理結果によって、画面を分けたい場合、

・コーディング規約だけで、特段のことを使わず
・さらに、アジャイルっぽく、テストファーストやモジュールテスト可能で
・もちろん、分業可能なようにするには?

どういう規約にすればいいかについて、書きます。

(なお、「カオル姫」で、このページに来ちゃった人、このページには、カオル姫のCM情報しかないです。>_<! ごめんなさい。CM情報は、このページで、1箇所だけ、リンクになっているところ)。

 この方法、3通りあります。
 1つは、コントローラーを使わないもの
 2つめは、コントローラーを使い、
   コントローラーが次に処理するプログラムや、画面を決める方式
 3つめは、コントローラーを使うものの、
   次に処理するプログラムや、画面はコントローラーが決めるのでなく、
   コントローラーを呼び出す側がきめるもの

 についてです。
 なぜ、3番が必要かは、3番について書くことがあったら、そのとき、覚えていて、気が向いたら書くことでしょう。

 なお、ここでは、以下、省略して
  1番の方法を、カオル姫方式
  2番の方法を、カオル姫-テンさん方式(集中)
  3番の方法を、カオル姫-テンさん方式(分散)と書きます。
 なんで、こんな名前にしたかは、あとで、書きます(このブログの中に書かれることでしょう)。

 今日は、カオル姫方式のご披露です。




 PHPで、プログラムと画面を分ける事は、意味があります。

 それは、デザイナー部分と、プログラマーの作成部分を分けるということもあるし、画面が来る前に、プログラム部分をテストしたり、プログラム部分ができてないとき、画面部分を先にテストできるからです。

 さらに、業務上の要請からもあります。

 業務において、こんなケースが考えられます。
  支払いが
   ・銀行振り込みのときは、何も処理しない
   ・カードのときは、与信チェック
     エラーのときは、エラー画面表示
  その後、なんかいろいろ処理して
  正常のときは、同じ「正常処理」画面をだしてね!

 といったように、エラー画面が出るか、正常画面が出るか分からない(与信チェックしないとわかんない)、かつ、場合によって、処理内容が違う。そして、1つ1つの処理は長い。でも、最終的には同じ画面を出すといったかんじ。

 こういう、処理結果によって画面が変わるとか、ある値によって、処理が違うといったときも、
   1画面1PHPプログラム、
   1処理1PHPプログラム
 にして、分離したいわけです(そーしないと、ものすごい量のプログラムになる)。

 で、どうするか。。。




そのとき、こういうコーディング規約にします。

■■ 画面側(VIEW)
・デザイン部分をあらかじめ作成しておきます。そして、動的に値が変わるところは、なにか、マークを入れておきます。
・はじめに、sessionをスタートさせます。
・セッションの中に、入っている値を表示します。
   項目名1つに、1つの値が入っているときはそのままprint、
   項目名が、複数レコードで、1レコードにいくつかの項目がある場合は、
   foreach(@_SESSION[項目名] as $rec) で1レコードぷん取り出すのを繰り返させ、
     その繰り返しの中で、 print $rec[カラム名] で値を表示する。
・デザイン時、動的に値が変わるところに、マークを入れてもらい、
 上記の書き換えを行う。

■■ 処理側(プログラム部分)
・Viewがクリックされた場合、処理用のPHPプログラムを呼び出す
・そのプログラムでは、画面表示するとき、動的に値が変わるところは、セッションの中に入る
・最後に、さらに処理が続く場合は、headerのロケーション指定で、次の処理を、
  VIEWで表示したい場合は、headerのロケーション指定で、VIEWのPHPを呼び出す

という形になります。




 つまり、イメージ的にいうと、

・プログラムの処理部分と、VIEW部分を、完全にPHPプログラムをわけてしまい、
・クリックしたときには、プログラムの処理部分を呼び出す。
・で、処理中に、表示したい値をセッションに入れて
・最後に適切な(画面表示したい)VIEWをheaderのLocationで呼び出す
・呼び出されたVIEWは、セッションの値を表示する

といったかんじ。




 この例を、先ほどの「業務において、こんなケースが考えられます」と挙げた例で書くと、

・画面入力後、「銀行振り込み・カード振り分け」PHPをForm のActionから呼び出す。

・銀行振り込み・カード振り分けPHPは、
   銀行振り込みのとき、「なんかいろいろ処理して」PHPを呼び出す
   カードのとき、カード処理PHPを呼び出す
 呼び出し方は、この前のブログに書いた、hederのLocationで

・カード処理PHPは、処理をして
   エラーだったら、表示に必要なものをセッションにセットして、
      エラー画面(VIEW)を呼び出す
   OKだったら、「なんかいろいろ処理して」PHPを呼び出す
 呼び出し方は、この前のブログに書いた、hederのLocationで

・「なんかいろいろ処理して」PHPは、いろいろ処理して、セッションに表示内容をセット
 最後に、「正常画面」PHP(VIEW)を呼び出す
 呼び出し方は、この前のブログに書いた、hederのLocationで

・呼び出された「正常画面」PHPや「エラー画面」PHPは、セッションから値を取得して
 それを表示する。

てなかんじになる。




 で、今CMで、これを見える化??したものがテレビのCMで、流れている。

 JTのCMで、バレーボールのやつ(ここ

 このCMで、バレーボールがセッションだと思ってください。

 このボールをカオル姫(菅山かおる選手、一番左上)が受け取って、次々に選手、さらに、工場や、運送のおにーさん、タバコ屋のおじさんがつないでいき、最後に、アタッカーがボールを打ちますよね。

 ここで、アタッカーは、境界、バウンダリになるので、Viewつーか、画面になります。
 その間の人は、ポールをつなぐ(セッションに値を入れる)という処理をしていますよね。
 このボールをつないでいる、それぞれの人が、PHPプログラム。

 つまり、セッションをつうじて、アタッカー(VIEWプログラム)へ、いろいろの人が処理(PHPプログラム)してる。

 で、JTの選手は、竹下さん(一番上4番目の写真)とカオル姫だけでなく、もっといろいろいるけど、ボールがきたのは、たまたま、この2人、つまり、セッションの中に入っている値によって、処理するPHPプログラムが選ばれる。

 で、カオル姫は、竹下さんは知ってるけど、まさか、タバコやのおじさんは知らない。

 つまり、PHPの処理プログラムは、状況によって、次に誰を呼び出すか(複数候補有)は知っていて、ボールによって=セッションの値によって、呼び出す先を決めて、呼び出す(headerのLocationで)てなかんじなわけです。




 ということで、この方式を、このCMからとって、カオル姫方式と、勝手にウィリアムのいたずらが命名しました(一番初めにボールを受けるのが、カオル姫なので)。

 で、次の話は、この具体例を示したり、カオル姫-テンさん方式についてご披露するのですが、それについては、気が向いたときに、またかきます。
 もう時間切れ!なのだ。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« PHPで、別のPHPや画面を呼... | トップ | 画面とプログラムを分けても... »
最新の画像もっと見る

PHP」カテゴリの最新記事