ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

DIとクラウド(クラウドのサービス変更に柔軟に対応するためのDI利用)


 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%とかで保障してるけど、すべてのサーボスの呼びし引数、返り値が、変更なく動くかどうかは、保障してるの?っていう状態だと思うので、サービスの呼びし引数、返り値変更とかに対応するためにも、こういう仕組みは、必要かもね?