モジュールを開発する際、複数のモジュールが使用できるサービスを識別します。
このようにしてサービスにてこ入れすることにより、開発サイクルとコストを最小化します。
多数のモジュールによって使用されるサービスがある場合は、
ターゲットがアップグレードされた場合に新規サービスへの切り替えが呼び出しモジュールに対して透過的になるように、呼び出しモジュールをターゲットから分離する必要があります。
このトピックでは、単純な呼び出しモデルと分離された呼び出しモデルを対比して、
分離がどのように役立つかを示す例を提供します。
特定の例について説明しますが、これが、ターゲットからモジュールを分離する唯一の方法というわけではありません。
アプリケーションの分離の例
単純な呼び出しモデルを使用した場合、
同一のサービスを呼び出す複数のモジュールは、
『
単一のサービスを呼び出す複数のアプリケーション』のようになります。
APPA、APPB、および APPC はすべて CalculateFinalCost を呼び出します。
図 2. 単一のサービスを呼び出す複数のアプリケーション
CalculateFinalCost によって提供されるサービスは、
そのサービスを使用するすべてのモジュールに新規コストが反映されるように、
更新する必要があります。
開発チームは、新規サービス UpdatedCalculateFinal を構築およびテストして、
変更を取り込みます。
新規サービスは実動に移す準備ができています。
分離を使用しない場合は、UpdateCalculateFinal を呼び出すために、
CalculateFinalCost を呼び出すモジュールをすべて更新する必要があります。
分離を使用した場合、実行する必要があるのは、バッファー・モジュールをターゲットに
接続するバインディングを変更することだけです。
注: このようにサービスを変更することにより、オリジナルのサービスを、それを必要とするその他のモジュールに提供し続けることができます。
このモデルで、呼び出しモジュールは変わりません。
実行する必要があるのは、バインディングをバッファー・モジュール・インポートからターゲットへ変更することだけです
(『
UpdatedCalculateFinal を呼び出す分離された呼び出しモデル』を参照してください)。
図 4. UpdatedCalculateFinal を呼び出す分離された呼び出しモデル
バッファー・モジュールがターゲットを同期で呼び出す場合、
元のアプリケーションに戻される結果は、
バッファー・モジュール (メディエーション・モジュール、
またはビジネス・モジュール用のサービス) を再始動したときに、
新規ターゲットから送信されます。
バッファー・モジュールがターゲットを非同期で呼び出す場合、
元のアプリケーションに戻される結果は、次の呼び出し時に新規ターゲットから送信されます。