質問をする前に、アプリケーションがどのように構築されているかを説明する必要があります。
サービス層でejbを使用するいくつかのWebアプリケーションを実行します。私は短い例でコミュニケーションを説明しようとします:
- JSF Bean(PersonHandler)がファサードを呼び出して、「Person」オブジェクトを削除します
- ファサードはさまざまなサービスを使用できますが、他のファサードを使用することはできません。この場合、PersonFacadeはPersonService(個人を削除するため)とNotificationService(電子メールを送信するため)を使用します。また、トランザクションはファサードロジックによって制御されます。電子メールは、トランザクションが正常にコミットされた場合にのみ送信する必要があります。
- サービスは、別のサービスまたはファサードへの参照を持つことはできません。これの代わりに、PersonServiceにはPersonDao(永続ロジック)への参照のみがあります。
このアーキテクチャは非常に一般的だと思います。これが私の質問です。
PersonFacadeのdeleteメソッドには、複製しない非常に重要なコードがあります。人を削除するたびに、このコードを実行する必要があります。別のファサードロジックでは、まったく同じコードが必要ですが、ファサード<->ファサード通信は許可されていません。
この問題の最善の解決策は何ですか?
これが私の現在の解決策ですが、私はそれに満足していません。削除ロジックを処理するejbを使用して新しいejbモジュールを作成しました。両方のファサードモジュールは新しいモジュールに依存しているため、すべてが機能し、「ファサードは他のファサードを使用しない」という契約を破ることはありません。毎回これを使用すると、異なる場所で同じコードが必要になると、モジュールが爆発し、モジュールが混乱します。現在、250を超えるejb/jarモジュールがあります。