SimpleModelerで扱うメタモデルを設計する上での懸案事項の一つが多対多の関連と関連クラス(association class)の扱いです。
SimpleModeling/MindmapModelingのオブジェクト・モデルの中で多対多の関連や関連クラスをどう扱い、JavaやRDBMSにどうマッピングしていくのかという点は、テキストDSLでの効率的な記述方法の問題と相まって、あまり良い解を思いつきませんでした。
また、多対多の関連や関連クラスはリソースエンティティや普通のエンティティで代替するのが可能なことと、多対多の関連が出てくるところはモデリングを進めると属性を持った普通のクラスに伸びていくことが多いので、それほど強いニーズを感じていなかったということもあります。
ただ、以下の2つのニーズがあることがわかったので関連クラスをサポートすることにしました。
- 既存のRDBMSのテーブルを扱う場合に、関連クラスを使えると便利
- オブジェクト側に変更を加えず、ユースケースのニーズに応じて関連を追加できる方法があると便利
多対多の関連は、今のところ直接DSLで記述できるようにする予定はありませんが、関連クラスを使って実現することが可能です。
MindmapModeling
関連クラスは、MindmapModelingのトップクラスの枝であるBOI構造枝に「関連」を追加し、この下に配置します。
以下のようにしてクラス図を生成することができます。
$ sm -diagram associationClass.xmind
このマインドマップから生成されるクラス図です。トレイト・クラスが一つ定義されています。
SmartDox DSL
上のMindmapModeling文法に対応するSmartDox DSLは以下になります。
#+title: 関連クラス/Association Class * 道具 ** ブログ ** タグ * 関連 ** ブログタグ対応 #+caption: 関連 | 名前 | 型 | 多重度 | |--------+--------+--------| | ブログ | ブログ | * | | タグ | タグ | * |
一点だけ、データ型を指定しているところが異なります。
このDSLから以下のようにしてクラス図を生成することができます。
$ sm -diagram associationClass.org
このマインドマップから生成されるクラス図です。トレイト・クラスが一つ定義されています。
この場合はデータ型をDSLで指定しているので、その指定もクラス図に反映されています。
諸元
SimpleModeler Version 0.4.0-RC5-SNAPSHOT (20121129)
SimpleModeler 0.4.0-RC4から少し手を入れたバージョンなので、0.4.0-RC4とは出力されるクラス図が若干異なります。
0 件のコメント:
コメントを投稿