2017-10-20 12 views
0

私はUIとコアという2つのモジュールを持っています。最後に、ビジネス処理ロジックがあります。私の最初の実装では、UIモジュールはCoreモジュールに依存しています。モジュール間の循環依存関係Javaクラス

しかし、私はコアのUIモジュールに、ステータス変更に関するUIを更新するためのメッセージをUI/websocketに送信するように実装しました。

UI-websocketにメッセージを送信できるUIモジュールにHandlerクラスがあります。 私の問題は:CoresのHandlerクラスにアクセスしてwebsocketにメッセージを送信するにはどうすればいいですか?

答えて

1

循環依存関係を解決するには、共通の依存関係を別の新しいパッケージに移動し、2つの元のパッケージを新しいパッケージにのみ依存させる必要があります。たとえば、websocketクラスを新しいパッケージに移動することができます。 transfer object patternも使用することを検討してください。

0

モジュールAは、モジュールBがinterfaceを定義している場合、およびモジュールBがインターフェイスを実装するコールバックオブジェクトを渡すために呼び出すことができるメソッドを提供する場合、モジュールBに依存せずにモジュールBを呼び出すことができます。


は、私がfoobarのライブラリーを定義したと仮定し、foobarのライブラリのステータスがあるため、いくつかの外部イベントで変更される可能性があることとします。

interface StatusCallback { 
    void statusChange(Status status); 
} 

class Foobar { 
    ... 
    void registerStatusCallback(StatusCallback statusCallback); 
    ... 
} 

クライアントライブラリにそれを提供し、StatusCallbackをimplmentsインスタンスを作成し、それを使用しています:

Foobar foobar = ...; 

statusCallback = new StatusCallback() { 
    void statusChange(Status status) { 
     ...do something with changed status... 
    } 
}; 

foobar.registerStatusCallback(statusCallback); 
ライブラリー・クライアントは、ステータスの変更を認識するようにしたい場合、私は コールバックメカニズムを提供することができ

外部イベントが発生し、ステータスが変化すると、ライブラリはクライアントのstatusChange(status)メソッドを呼び出します。しかし、ライブラリのソースコードはクライアントコードに依存しません。

+0

これについて詳しく説明できますか?私はあまり理解しませんでした.. – user5636236

+0

@ user5636236、上記の私の拡張答えを見てください。 –

関連する問題