Neal Ford氏(source)は密結合と意図しない結果に関する興味深い記事(source)を掲載している。同氏はWindows PowerShellとその密結合の悪夢の一例として、ヘッドレスのWindows Serverからの不可欠な除外を使用している。
彼らはWindows Power Shell(旧姓:Monad)という名の素晴らしいWindows用の新たなバッチを構築しました。彼らはこれでシェル言語の可能性を上げたと言えるでしょう。ひとつだけ小さな問題があります。彼らはWindows Serverのヘッドレスバージョンの形跡をVista(現在約8GbでOSにおいてのみ)の形跡よりも小さくしたいのです。問題は.NETフレームワー クとライブラリがWindowsのいたるところで結合しているので、.NET 2は含まれていないということです。もし.NET2を含むとWindows全体を含むことになってしまうのです。そしてそこで摩擦が生じるのです。 Windows Power Shellは.NET2上で記述されています。それはこのタスクマネージ、サービス、そしてオペレーティングシステムの一般的なスクリプティング用の素晴らしいツールが、それから最も恩恵を受け得るシステム用には有効にならないということなのです(source)。
.NETの開発中デザインチームにとっては、コンポーネントの再開発をする代わりにWindowsのオペレーティングシステムによって提供された基礎的な資産を再利用したほうが賢明であっただろう。また同様に分離したメッセージの代わりに最適化された直接的インヴォケーションによって、これらの資産と会話するほうが賢明であっただろう。そう、もしなにもなかったらその場しのぎの方法しかなかったのである。またそれが重要ポイントなのである。特に私たちがコ ンポーネントアーキテクチャからサービス指向のアーキテクチャに移行するに連れて、自然で効率的な資産の再利用と独立した分離システムのバランスが本当の戦いなるのである。そしてその戦いはいろいろな顔を持っているのである。WS-* vs. REST、同期vs.非同期コミュニケーションモデル等だ。Jim Webber氏はStefan Tilkov氏とのインタビューにおいてサービスアーキテクチャに適用する結合を取り上げている。下記はそのインタビューからの引用である(source)。
私たちは自分たちが実装しているプロセスを比較的孤立させることによって、サービスエコシステムを成長させ再利用することができるのです。それには私たちが まったく予期していなかったビヘイビアが含まれています。一方もし私たちが全てを一つの大きなSOAプラットフォーム内で育てるのを許容すれば、密結合を得やすく今後の進化へのオプションを制限することになり、またこのタイプの興味深い急なビヘイビアへのオプションを制限してしまうことになります。私たちはこれと同様のことをIDLを通して密結合したCORBAアプリケーションの時代に経験し、また今日WSDLと呼ばれるもうひとつのIDLを通して密結合したWebサービスにおいてそれを経験しているのです。もし私たちがタイプシステムを共有していたら、私は支障をきたす影響のあるプログラム内のタイプシステムを変更したいのです。だから私があなたに”変更を施します”という時にはあなたは”やめてください、私を壊さないで!”というリアクションを起こすのです。そして私たちはこの麻痺状態に突入し、お互いを傷つけるのが恐くて前に進めなくなってしまうのです。
更なる情報に関してはJim Webber氏のインタビュー(英語)を見てほしい。
原文はこちらです:http://www.infoq.com/news/2007/11/tight-coupling-consequences