同じレイヤー内の別のサービスによって実装された情報を必要とするサービスがあります。あるサービスが同じレイヤーの別のサービスに依存するのは良い習慣ですか?
はい。 SOA(Service Oriented Architecture))のアーキテクチャ図を見てきました。これはまさにこれが発生します。サービスは、ユーザーがサービスを呼び出しているかどうかを気にしないように作成する必要があります。 「同じレイヤー」、または複合サービスに結合されています。
オープングループSOAリファレンスアーキテクチャの図は、「同じレイヤー」でサービスを呼び出すサービスを示しています。図22-2( http://pubs.opengroup.org/architecture/togaf91- doc/Arch/chap22.html )
Open Service Integration Maturity Model(OSIMM)も良い図です。リンクはIBM Process Serverについて語っていますが、Kim ClarkとBrian Petriniは非常に良い説明をしています:図1( http://www.ibm。 com/developerworks/websphere/library/techarticles/0904_clark/0904_clark.html )
お互いのサービスを利用しています。このようにして、アルゴリズムをレイヤー全体にコピーする代わりに、サービスメソッドを再利用できます。
私の経験では、知っておくべきことは循環依存です。
サービスクラスを初期化するとき、たとえばコンストラクターで、他のサービスオブジェクトフィールドを初期化すると、フィールドも初期化サービスに依存している場合、循環呼び出しが終了しないことがあります。
メソッドを呼び出すとき、サービスメソッドは別のサービスコールを呼び出す可能性があり、それはまた別のサービスメソッドを呼び出す可能性があり、これにより循環呼び出しが再び発生する可能性があります。