ちょっとメモメモ
たとえば、Strutsで(いや、JSPでもいいんだけどね)、こうやって書いたら、
・Javabeanのビジネス記述以外を自動化できて(=追加仕様でも自動化できる)
・ビジネス内容が明確に出来る
んじゃね?というのを思いついたので、かいてみる。
■JavaBeanの構造
画面自体が1ビジネスロジックを示し、そこで、1画面、1モデル(1Bean)を作成すると考える。
そこで、Javabeanを以下のように作る
class 画面名bean{ /* * フィールド */ //入力項目を列挙する=ActionFormのフィールド全部書く private String para1; //その画面の出力項目をすべて書く private String outpara1; //ただし、表形式になっているところは、レコードを別beanにする private Rec1[] data1; // Recが別bean // 次画面のBeanを列挙する private 次画面1名bean outbean1; private 次画面2名bean outbean2; // 遷移する次画面 private String next; /* * メソッド */ // 上記フィールドのsetter,getter public String getPara1() { return para1; } public void setParam(String para1) { this.para1 = para1; } // : // 以下省略 // : // 実行部分 public void execute() { //ここに処理を書く } } |
■こうすると
このJavaBeanは、画面定義書と画面遷移がわかれば、自動的に作れる。(executeの中身以外)
・画面名は画面定義書にかいてあるはず
・はじめの入力項目のフィールド名は画面定義書にかいてあるはず
・出力項目のフィールド名は画面定義書にかいてあるはず
・テーブル形式になっているところは、Rec1とかテキトーに名前をつけておいてbeanにする
→そのレコードの項目内容は、画面定義書にかいてあるはず
・次画面名は画面遷移図にどの画面に遷移する可能性があるか書いてあり、
遷移先画面の画面名は、画面定義書にかいてあるはず
・最後に次画面遷移 private String next; (固定)
・上記のフィールド部分をもとに、getter,setterは自動的に作れるでしょ。
・最後に、public void execute()メソッド(固定)
(っていうか、こーいう自動化が出来るような画面定義書、画面遷移図を書くのかな?)
で、このあと、Strutsで考えると、ActionとactionFormが必要だけど・・・
■そうすると、Actionは
そうすると、仮にStrutsだとしたら、Actionで、こんな感じで書く
(1)画面のActionFormをformとかの変数に入れる
(2)セッションから、画面のJavabeanを取ってくる(後述※するが、画面名beanで取ってくると、取ってこれるはず)
なかったらnewで作成する
(3)画面の入力項目に関して
画面のjavabean.set項目名(form.get項目名());
をずらーっと書いていく
(4)そしたら、画面のjavabean.execute
→ここで、次画面に何を出すかのnextと、次画面のjababeanの値をセットする
(5)セッションに次画面のJavabeanセット
session.setAttribute("次画面名bean",画面のjavabean.get次画面bean名());
(6)次画面nextをセーブ
String next = 画面のjavabean.getNext();
(7)セッションから、画面のjavabeanをリムーブする(消す)
(8)return((6)のnextで、次画面を指定する)
これも、画面定義書があれば自動化できる。つまり、人の手を入れることがないので、
項目追加、削除修正の際は、全部作り直しでOK
※(5)で、次画面の内容をセッションに入れている。
そこで、次画面に遷移し、ボタンがクリックされ、次画面のアクションが走ったとき、
(2)の内容は、セッションに(次)画面名beanで入っている。。はず!
■他のものに関して
・ActionFormは、画面定義書の入力項目でOK
・画面JSPは、bean:writeで書くけど、この内容は、前画面の(5)で、次画面名bean
でセットされているので、セッションからこのbeanを取ってきて出力する。
→この辺の項目名などは、画面定義書に書いてあるはず
→もし、入出力項目があれば、セッションの内容から、ActionFormのresetでセットするのかな?
・struts-config.xmlは、いつもどおり、form-beanとactionを定義すればよい。
actionのforwardが、nextで設定する次画面の値になる。
ってことで、自動化できる。
■あとは・・・
画面のjavabeanのexecute部分を記述すればいい。
このとき、書くべき内容は、入力項目、出力項目をもとに、
・次画面(next)に、どの画面に行くかセットして
・次画面のbeanの出力項目に値をセットする
と、明確にできる。また、javabeanは、項目追加、削除されたとしても、execute以外に手を入れないので、
追加、削除された場合は、新規にjavabeanを作り直し、その後、execute部分を前のものに書き換え(=上書き)すればOK
また、executeを完成させる前に、ダミーで値を入れてダミーモジュールとして画面周りのチェックもできるし、
逆に、このBeanだけを取り出してJUNITにかけることも出来る。
さらに、適当にドライバを書けば、Beanだけ使って(画面ナシで)、前画面、次画面、その次と、結合チェックしていくこともできる。
(Beanに入出力画面項目のデータをすべて持つので)
セッションに入れるところは、カオル姫方式なのであって、カオル姫方式の変形かな?