2017-10-20 2 views
0

Ich habe zwei Module: UI und Core. In der letzten befindet sich die Geschäftsverarbeitungslogik. In meiner ersten Implementierung hat das UI-Modul Abhängigkeiten vom Core-Modul.Kreisabhängigkeit zwischen Modulen Java Klassen

Aber jetzt habe ich WebSockets im UI-Modul für Core, um eine Nachricht an UI/WebSocket zu aktualisieren UI über Statusänderungen zu implementieren.

Wir haben eine Handler-Klasse im UI-Modul, die die Nachricht an UI-Websocket senden kann. Mein Problem ist: Wie kann ich auf diese Handler-Klasse in Core zugreifen, um eine Nachricht an Websocket zu senden?

Antwort

1

Um zirkuläre Abhängigkeiten aufzulösen, sollten Sie die allgemeinen Abhängigkeiten in ein anderes neues Paket verschieben und die beiden ursprünglichen Pakete nur noch von der neuen abhängig machen. Zum Beispiel könnten Sie die Websocket-Klassen in ein neues Paket verschieben. Denken Sie auch daran, die transfer object pattern zu verwenden.

0

Modul A kann Modul B aufrufen, ohne von Modul B abhängig zu sein, wenn es interface definiert und eine Methode bereitstellt, die Modul B aufrufen kann, um ein Callback-Objekt zu übergeben, das die Schnittstelle implementiert.


Angenommen, ich habe die Foobar Bibliothek definiert sind, und nehmen wir an, dass der Status der Foobar Bibliothek wegen irgendeines externen Ereignisses ändern könnte. Wenn die Bibliothek Kunde will bewusst Statusänderungen sein, konnte ich einen Rückruf Mechanismus zur Verfügung stellen:

interface StatusCallback { 
    void statusChange(Status status); 
} 

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

Der Client verwendet es eine Instanz schaffen, die StatusCallback implments, um es in die Bibliothek bereitstellt:

Foobar foobar = ...; 

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

foobar.registerStatusCallback(statusCallback); 

Sobald das externe Ereignis eintritt und sich der Status ändert, ruft die Bibliothek die Methode statusChange(status) des Clients auf. Der Bibliotheksquellcode hat jedoch keine Abhängigkeit vom Clientcode.

+0

Können Sie näher darauf eingehen? Ich habe nicht viel verstanden .. – user5636236

+0

@ user5636236, siehe meine erweiterte Antwort, oben. –