SOAを理解する
疎結合とは?
SOAを説くときによくでてくる「疎結合」という言葉だが、その意味は2つの結合すべき要素(再構成の場合は各システムの機能など)を結合する際 に、お互いに影響しあわないように結合するということである。影響しないというのは、いずれの要素に対して変更や拡張があっても、もう1つの要素には影響 を与えないということだ。
ソフトウェア開発の原則に「Open-Close Principle(OCP)」と呼ばれる原則がある。この原則の「Open」はモジュールが拡張に対して開放されているという意味を指し、 「Close」というのは変更があっても他には影響を与えないという意味を指している。
システムに対してこの原則を適用する技術が、疎結合になる。つまり疎結合によって、変更に対しては閉じていて、拡張に対しては開放されているように構築できるということだ。
しかし、疎結合は抽象的に議論することが難しい。2つの結合方式を比較すれば、どちらが疎結合なのかを議論することはできるが、その具体例がないと 結合状況の議論はできない。それは疎結合の基準がないからだ。ソフトウェア工学にはモジュール間結合度(スタンプ結合、データ結合など)という尺度がある が、目的が異なっている。そこで筆者は、分散システムにおけるモジュール間の結合の強さを3つのレベルに分割して整理してみた。
レベル1
レベル1はRPCのような分散環境での関数呼び出しだ。このレベルはインターフェースを決めておけば実装を取り替えることができる。確かにインター フェースと実装が分離できるという意味では疎結合だが、呼び出し先が静的に(関数呼び出し)決定されており、呼び出すモジュールに対するルーティングも静 的に行われている。
このことから、呼び出し先と呼ばれる側は、関数名や引数の型、その順番などに依存している(CORBAにもDIIのような動的呼び出しの枠組みがある。DIIを利用した場合はレベル2の疎結合といえる)。