なぜか、シリーズ化してしまった、「画面定義をHTMLで行い、呼び出しをWebAPIでやる設計手順の試案」です。
やろうとしてるのは、
・HTMLで画面を作成し、
・AJAXでサーバ呼び出し、結果はXMLで受け取ったものを利用すると
・画面とサーバーが完全に分離する上に
画面から、逆にさかのぼって要求仕様にまでもっていける
→COBOLのシステムをWebに置き換えたいけど、ドキュメントもソースも無いときなんかに、利用できる
で、いままで、以下の手順で、画面からWebAPIを割り出し、ER図まできました。
●HTMLからサービスを抽出する (1)画面をHTMLで作成する(ここがスタート) (2)アクションなど、イベントを拾うところで、 onイベント=ファンクション として、とにかく、ファンクションをfunctionでつくってしまう (3)作った関数について サーバーアクセスするものは、関数の中に sv_access(呼び出し元、呼び出したいサーバーアプリ,"") みたいなかんじで、ダミー関数を書く (4)grepで、(3)のダミー関数(sv_access)を、一覧で取得 (5)検索した内容をファイルに保存し、Excelで読み込み、 WebAPIのサービス一覧を取得する (6)でてきた呼び出したいサーバーアプリ=サービスを、 1サービス1シートで、Excelシートにまとめる ●クライアント-サーバー分離 (7)クライアント側の画面と、サーバー側を完全に分離するためのダミーCGIを入れます。 ●第二正規形の手法を使って、ER図にもっていく (8)引数を入力データ項目、返り値を出力データ項目とし、 それらが、一時的なものか、永続的データかを決める。 (9)永続的データをエンティティと属性部分に切り分けます。 (10)エンティティごとに、属性を書き足していきます (11)一意にできるものがあったら、そいつを主キー、 なければ番号をつけて主キーにして (12)エンティティは完成 (13)この場合、繰り返しがあったら、別エンティティにして第一正規形 エンティティ内で、ある値がきまったら、必ず他の値も決まった値になる という第三正規形があったら、分けたかったら分ける。 (14)外部のエンティティの主キーを参照キーとして持てば、 他の値は持つ必要がなければいいやつは、参照キーだけをもちます。 (15)参照キーと主キーから関係は出ます。 カーディナリティは、主キーのほうが1、参照キーのほうは、0~N, エンティティは(12)で完成したので、 (16)ER図がかけます。 |
今回は、前回の(10)でサービスに番号を振っておいて、属性を書き足したとき、そのサービス番号も書いておくと、後述する、検算のとき便利です。と書いた、検算についてです。
■CRUD図を作成し、矛盾を確認する
で、次の作業は、エンティティの属性の生成、書き出し、読み込み、削除が、WebAPIで矛盾なく行われているかを確認するため、CRUD図を描きます(っていっても、属性までやるのはめんどっちかったら、エンティティレベルでもOKだし、これ自体省略しちゃうことも多いと思うけど。。)なので、(18)は、
(18)CRUD図を描いて、検算する
で、CRUDとは、イラクの。。って、今日2度もしょーもないギャグを書いてもなんなので、まじめにかくと、
ここ http://www.ne.jp/asahi/ikeda/home/PCword/word/CRUD_Diagram.html
にあるような図です。
横のテーブルのところにエンティティ(ないしはエンティティの属性)、
縦の機能のところがWebAPIになります。
ここで、R=読み込みときている場合、C=生成の機能が、順番的に前に呼び出されないとへんです。また、C=生成がない場合は、DBにあらかじめ、データが登録されているマスター項目の内容のはずです。
マスターで初めからデータがはいってもないし、かつ、だれも作らないのに、読み出したり、更新したら、それはへんです。
削除は、ないってこともあります。
1つは、手作業で削除するケース、
他には、絶対件数が増えない(たとえば、各テーブルの件数を持っているなど)ので削除する必要はないケースです。
なので、削除がなくてもOKなのですが、あったほうがいいかどうかを考えます。なお、Cする前にDしたらおかしいですし、Cして、Dするだけも変です(つまり、まったく読むことがないのに削除する)Cだけもへんです(つくるだけ、だれもよまない。。いらないジャン>_<!)
てなことで、矛盾を考えます。
矛盾してたら、たいてい、WebAPIで引数がたりないか、サービスが足りないか、エンティティが間違っているので、なにが悪いか考えて直しましょう。
で、このシリーズの次回は、DFD(相当)を作ります。