いくつかの独立したモジュールを表示するページを持つ MVP で設計された Java アプリケーションがあるとします。特に、アプリには 2 つの独立した MVP モジュールがあり、これを考慮します。アプリには、前述のモジュールが通信する必要がある機能があります。モジュールは、機能専用のインターフェース (API) A および B を提供します。この機能のロジックを処理する Manager (M) もあります。マネージャーは、ページをトラバース (または何らかのコンテキストを使用) して、考慮されている機能に参加する必要があるモジュールへの参照を取得できます。
Manager のコードの以下のスニペットは、私が考えているアプローチを示しています。
EventBus を介した非同期イベントの使用
eventBus.addHandler(Event.CHECK_A_IS_OK, new CheckAIsOkHandler(Event e){ eventBus.fireEvent(Event.DO_SOMETHING_ON_B, e.getValue(); }); eventBus.fireEvent(Event.CHECK_A_IS_OK);
直接参照の使用
A a; B b; void findModules(){ a = context.findA(); b = context.findB(); } ... if (a.check()){ b.doSomething(B.getValue()); }
質問は次のとおりです。
オブジェクト間の通常の通信 (条件の確認、値の戻りなど) に EventBus を使用しても問題ありませんか? それとも、実際のイベントにのみイベント パターンを使用する方がよいでしょうか (何かが起こったことをサブスクライバーに通知することを意味します)。2 番目のアプローチに従うことは疎結合に反しますか? 他のパターンの方が適しているのではないでしょうか?
直感的には、2 番目のアプローチの方がクリーンです。