goo blog サービス終了のお知らせ 

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

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

UML等各種ダイアグラムのエラーチェック体系化(その9:どんなダイアグラムもRDBに!概略)

2009-06-30 14:17:12 | Weblog

 シリーズ、 「UML等各種ダイアグラムのエラーチェック体系化」です。
 前回開発における一貫性チェックをするには、

・あるダイアグラムを書く工程において、必要なデータがそれまでの工程でダイアグラム等で明記されているか

 を調べるってことで、それをするには、

・すべてのダイアグラムをRDBに入れます。
・必要なデータがそろっているかSQLで検索をかけます。

 っていう形で調べようという話を書きました。

今回はその、「すべてのダイアグラムをRDBに入れ」る方法です。




■すべてのダイアグラムをRDBに入れる方法概要

その方法は、こんなかんじ。

・すべてのダイアグラムの構成要素を
  ノード
  リレーション
  属性値
 にわけ、属性値の種別を属性とします。

・ノード、リレーションをある法則に従い、RDBのテーブルにいれます。

もうちょっと詳しく書きます。




■すべてのダイアグラムの構成要素をわける。

 ダイアグラム中、単独で存在しても意味をなす、ダイアグラムの構成要素を「ノード」とします。

 たとえば、
   ・DFDのプロセス
   ・ER図のエンティティ
   ・アクティビティ図のスイムレーン、アクティビティ
   ・ユースケース図のユースケースとアクター
   ・クラス図のクラス
     :
 などです。

 一方、たとえば、ER図において、エンティティとエンティティの間に引かれる線(リレーション)は、エンティティ=ノードが存在しないと意味を成さないです(記述することが出来ないです)。
 このように、2つ以上のノードとノードを結び付けているものを、リレーションと呼びます。
 DFDのデータフローなども、そうです。

 一方、流れ図における、注釈のような、あるノードに対して、説明するために、線を引っ張って書かれるものがあります。
 これは、属性値です。
 また、属性値は、ノードやリレーション上、あるいは、上や横などにかかれます。
 全部属性値です。

 だから、
   ・DFDのプロセス名(プロセスのところに書かれているもの)
   ・DFDのデータフローの上に書かれるデータについて
   ・アクティビティ図のアクティビティにかかれる言葉(アクティビティ名?)
   ・ユースケース図のユースケース名、アクター名
   ・クラス図のクラス名、属性名、メソッド名
 ぜーんぶ、属性値です。

 で、属性値は、意味があります。たとえば、DFDのプロセスに「受注」とかかれていれば、プロセス名、
 クラス図で、
 getGas();
setGas();
run();
 などと書かれていれば、メソッド名など。。。

 このような、属性値の意味を、属性とよびます。
 上記(属性:)メソッド名のようにある属性がいくつかの属性値を持つこともあります。

 ここまでをまとめると、こんなかんじ。

・ダイアグラムの構成要素において
   単独で意味をなす存在=ノード
   単独では意味はないが、2つ以上のノードを結びつける=リレーション
          あるノード等に結びついている(説明など)=属性値→(性質、種別)属性
          どこにも結びつかない、意味はない:飾り(保存しない)

※飾りは、位置関係などを示します(例:楽譜の5線)




■ノード、リレーションをある法則に従い、RDBのテーブルにいれます

原則
・ノードをテーブルとし、そのノードの属性がカラムになります。
・リレーションをテーブルとし、リレーションの属性がカラムになるほか、
   リレーションに結びついている、2つのノードもカラムにします
   →3つ以上結びついている場合、2つに分解します。

このほか、細則、例外があります。




ってなかんじで、RDBに入れていきます。
次回は、「すべてのダイアグラムの構成要素をわける」をもう少し細かく。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

モデルのJavabeanを、こう書いたら、完全独立、モデル処理以外自動化できる気が・・・

2009-06-30 10:56:54 | Weblog

 ちょっとメモメモ
 たとえば、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に入出力画面項目のデータをすべて持つので)

 セッションに入れるところは、カオル姫方式なのであって、カオル姫方式の変形かな?



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする