まったく異なる操作を実行するA、B、C(このリストは大きくなる可能性があります)を実行する操作のリストがあります。この各操作は、個別のJavaクラスによって実行されます。上に座ってA、B、Cに電話するマネージャーMngrYがいます
操作(A、B、C)を実行するクラスは、目的のためにさまざまなサービスX1、X2、X3、X4、X5を呼び出す必要があります。サービスを呼び出すためのラッパークラスWX1、WX2、WX3、WX4、WX5があります。A、B、Cからの呼び出しの一部は一般的です(たとえば、WX3、WX4)。(A、B、Cの2つ、またはそれらの3つになります)。
ここで、からX1、X2、X3、X4、X5を呼び出す必要があります。理想的には、A、B、Cのそれぞれが必要なサービスを呼び出す必要があります。しかし、A、B、Cのすべてで共有されているものの場合、MngrYから呼び出して、サービス呼び出しの出力をA、B、Cのそれぞれに送信することは理にかなっています(効率的には理にかなっていますが、MngrYのように設計的には理にかなっています) A、B、Cがどのように動作するかを知らないでください)。
したがって、オプションは
MngrYから共通サービスコール(WX3、WX4)を呼び出します。これは、個々のコンポーネントから個別に必要です。いいデザインですか?
ManagerMngrYからすべてのサービスコールを発信します。スケールアップしますか?将来的には多くのサービスリクエストを行う必要があるかもしれません。他の人のために各モジュールをブロックし、MnagrYに各モジュールの要件を認識させるように設計します。
必要に応じて、個々のコンポーネントから(必要に応じて)すべてのサービス呼び出しを行い、ラッパーにキャッシュによって重複リクエストを処理させます。2つの呼び出しが行われないことをキャッシュに依存するのは良いことですか?サービスは数ミリ秒以内に結果を返す必要があり、常に2つの呼び出しを行う余裕はありません。
または、WX1、WX2、WX3、...にキャッシュメカニズムを設定して、同じ呼び出しが2回行われないようにする必要があります。
また、将来的には、MngrYからA、B、Cを並行して呼び出したい場合があるため、その場合、キャッシングによって問題が発生する可能性があります。同じリクエストが複数回行われる可能性があるため。