16. BridgePointのモデルは変換可能③
(変換ルール)
? 変換ルールはデータベースへのアクセスと、変換に
使用するテンプレートを定義したもの
? BridgePointでは変換ルール記述用の言語である
RSL(Rule Specification Language)で記述する
?アクション記述に近い構文
.select many classes from instances of O_OBJ
.for each aClass in classes
.select many attrs related by aClass->O_ATTR[R102]
.for each anAttr in attrs
${aClass.Name}.${anAttr.Name}
.end for
.end for
.emit to file "test.txt"
変換ルールの例
「.」で始まる青字がデータ
アクセス部分
赤字がテンプレート部分
ModelCompilerに
よる変換
Foo.名前
Foo.長さ
test.txt
テキストならなんにでも変換
できるので、c言語だけでなく
htmlでもjavaでも変換可能 16
21. ? 属性が足りないため各クラスが何を示しているか曖昧
? 関連端名がなく、どのような関係を表しているか多重度が
適切なのかわからない
? 現在借りている本を示しているのか、これまで
借りたことがある本なのか?
何がいけないのか?
ある人の現在借りている本一覧取得
select many borrowingBooks related by aPerson->BOOK[R1];
ある人の借りたことがある本一覧取得
select many borrowingBooks related by aPerson->BOOK[R1];
同じになるの
はおかしい
21
27. 妥当性確認
? モデルができたらロジックを書き、妥当性を判断する
? テスト用のアクションを書いてVerifierで動作を確認
select any aBook from instances of BOOK where selected.ID == param.ID;
if ( empty aBook )
//指定された本のインスタンスが存在しない
return false;
end if;
// 指定された本の蔵書のうち、借りられていないものを検索
select any aBorrowBook related by aBook->RBOOK[R2]
where selected.borrowingState == 0; // 1が貸し出し中
if ( empty aBorrowBook )
// すべて貸し出し中だった
return false;
end if;
// 借りられる蔵書があったので、関連と属性を更新
// 貸出状態に変更
aBorrowBook.borrowingState = 1;
// 貸りる人と蔵書を関連付ける(aMemberはmemberIDを持つインスタンスのハンドルとする)
relate aBorrowBook to aMember across R1;
// 以前借りたことがある本か?
select any aBorrowedBook related by aMember->BOOK[R3]
where selected.ID == aBook.ID;
if ( empty aBorrowedBook )
// 借りたことがない本なので、関連を張る
relate aBook to aMember across R3;
end if;
27