XML再考
XMLについて思うことがあったので
ぜんぜんまとまってないけど書き綴ってみる。
用語の使い方とかむちゃくちゃだし
ぜんぜん厳密にしてないので注意
・アプリケーションドメインのデータ構造 Appがあるとする。
これは仕様変更によって頻繁に変わる可能性がある。
そして App はなぜか XML で表現しないといけないという条件があるとする。
・XMLは階層型データ構造を表現するDSL
階層型データ構造にマッチしないものはXMLにマッピングが難しい。(※1)
・変更の依存関係グラフを構築できる。
変更の依存関係グラフ
例えば AppXML を App を無理やりXMLにマッピングしたものとする。
( Text ) ← ( XML ) ← ( AppXML ) ← ( App Module )
↓
( App )※これが最も変更されやすい
構造に変更があった場合はエッジの矢印とは逆方向に変更が伝搬する。
TextとXMLはそうめったに変更されるものではないとして
AppXMLはAppの変更を伝搬してしまうため、Moduleが安定しない。(※2)
アイディア その1
※1と※2の理由があるためXMLで直接Appを表現するのは
よくなさそう。
ということでもうちょっと考える。
まず表現したいデータ構造の一部が階層型であった場合は
XMLで表現すると自然。
そうでない部分、例えばDictionaryなどのデータ構造などは
Key Value Pairを採用すれば
XML上にプロパティシステムを構築することができる。
それをPSというDSLとしよう。
PSはXMLによって定義される。
そのグラフはこうなる。
( PS Module )← ( App Module )
↓ ↓
( Text ) ← ( XML ) ← ( PS ) ← ( PSを使って定義したAppXML )
↓
( App )※これが最も変更されやすい
PSはこういうやつね
こうすることで Software の App からの App Module の変更の影響度を少なくすることができる。
一言でいうと適切な粒度でDSLを作れば
いいんでね?って話
結論
XMLでAppレベルのDSLを構築するのはおかしい。
XMLで構築したDSLで記述したAppXMLはOK
XMLを頼りすぎるのはやめなイカ?
※XMLだからRuntimeに変更できるとか、
XMLだから変更に柔軟であるといった誤解を持ってる人が多いと個人的に感じる。←偏見
参考
依存関係グラフとかは 「アジャイルソフトウェア開発の奥義」