DIの場合、実際に実行するプログラムは、(Springの場合のbean-conf.xml,Seasar2のdiconファイルなど)XMLに記述して、ユーザー側で、変更可能なようにしている。これにより、仕様変更を柔軟にしている。
一方、クラウドコンピューティングの場合は、クラウドの先は、なにやっているか見えない。
サービスを呼び出すときの引数が変更されてしまうと、ソースに手を加えないと、対応ができない。
これでは、拡張性がない。というか、リスクがいっぱい。
たとえば、A社とB社で、おなじようなサービスを提供していたとする。
(スケジュール機能とか)
いままで、A社を使っていたが、B社のほうが、値段が安いから、こっちを使いたいと思ったとする。
でも、引数が違えば、(それも、同じ意味なのに、違う名称を使っているような場合)プログラム修正&テストの開発をしないといけない。影響範囲もわからない。
DIで、2つの類似サービスを切り替えることを考える場合、この2つのサービスの抽象化されたインターフェースを使ってコーディングしておけば、設定ファイルの変更のみですむ(まあ、テストは必要だけど・・・)
じゃ、今の場合どうするか、つまり、A社とB社のサービスを簡単に切り替えるには?
それも設定ファイルを変えるかんじで切り替えるには?
ラッパークラスを使えばいい。
1.A社のサービスを呼び出して結果を返すクラス
2.B社のサービスを呼び出して結果を返すクラス
の2つのクラスをつくり、この2つの共通部分をインターフェースにして、他のクラスでは、このインターフェースを使って、操作をすればよい。
そうすれば、設定ファイルでA社のほうを使うか、B社のほうを使うかを切り替えられる。
クラウドコンピューティングは、「稼動している」ことは、99.99%とかで保障してるけど、すべてのサーボスの呼びし引数、返り値が、変更なく動くかどうかは、保障してるの?っていう状態だと思うので、サービスの呼びし引数、返り値変更とかに対応するためにも、こういう仕組みは、必要かもね?