Hallo,
ich habe ein sehr großes Projekt das aus vielen Klassen besteht die zum großen Teil auf die selben Daten zugreifen. Nehmen wir mal ein fiktives Beispiel:
Man kann zwei Fenster öffnen, die beide die Daten Einer Firma darstellen. Das eine die Aufträge, das andere die Bestellungen etc. Beide Fenster zeigen nun auch die Daten des Kunden der zum Auftrag, bzw der Bestellung gehören. Nun werden in einem dritten Fenster die die Aufträge in einer Timeline angezeigt und in einem vierten die Personen-Datails. Jetzt änder man in diesem vierten Fenster die Lieferadresse des Kunden. Nun sollten sich natürlich auch in allen anderen Fenstern die Adressen des Kunden ändern.
Klar kann man das alles über Listener machen. Aber ich finde das Konzept dann extrem unübersichtlich und man schreibt entweder sehr viele kleine Listener oder man hat einen großen sehr mächtigen Listener und damit in allen Listenern sau viele unnötige Methoden die man eigentlich gar nicht braucht
Von anderen Programmiersprachen kennen ich das Prinzip der Messages oder Notifications. Das finde ich wesentlich eleganter.
Prinzipiell sieht das also so aus:
Ich erstelle eine Singleton Klasse NotificationCenter. Dieser kann man eine Notification schicken. Die Notification hat einen unqiue Identifier (Meist einen Namen) und wenn nötig eine Collection von Objecten.
Alle Klassen die sich für eine bestimmte Notification interessieren, melden sich bei dem Center als Observer an. Bekommt das Center nun eine Notification, dann schaut es wer sich alles dafür registriert hat und schickt die Notification entsprechend weiter.
Auf diese Art und weise sind die Klassen sauber entkoppelt und hängen nicht über tausend Listener miteinander zusammen.
Das Problem ist, dass das Versenden der Notifications ja über einen zweiten Thread gehen muss, da sonst der aufrufende Task ja geblockt wäre. Wenn ich aber die Notification über einen zweiten Thread verschicke, dann kann der Observer u.U. versuchen eine UI Aktion zu starten, was aber nicht geht das er nicht mehr im MainThread läuft.
Gibt es schon irgendwas fertiges da in Java? Ich habe nichts gefunden. Oder gibt es was anderes das dem Konzept entspricht? Oder wenn nicht, wie löse ich mein Problem?
Gruß
Claus
ich habe ein sehr großes Projekt das aus vielen Klassen besteht die zum großen Teil auf die selben Daten zugreifen. Nehmen wir mal ein fiktives Beispiel:
Man kann zwei Fenster öffnen, die beide die Daten Einer Firma darstellen. Das eine die Aufträge, das andere die Bestellungen etc. Beide Fenster zeigen nun auch die Daten des Kunden der zum Auftrag, bzw der Bestellung gehören. Nun werden in einem dritten Fenster die die Aufträge in einer Timeline angezeigt und in einem vierten die Personen-Datails. Jetzt änder man in diesem vierten Fenster die Lieferadresse des Kunden. Nun sollten sich natürlich auch in allen anderen Fenstern die Adressen des Kunden ändern.
Klar kann man das alles über Listener machen. Aber ich finde das Konzept dann extrem unübersichtlich und man schreibt entweder sehr viele kleine Listener oder man hat einen großen sehr mächtigen Listener und damit in allen Listenern sau viele unnötige Methoden die man eigentlich gar nicht braucht
Von anderen Programmiersprachen kennen ich das Prinzip der Messages oder Notifications. Das finde ich wesentlich eleganter.
Prinzipiell sieht das also so aus:
Ich erstelle eine Singleton Klasse NotificationCenter. Dieser kann man eine Notification schicken. Die Notification hat einen unqiue Identifier (Meist einen Namen) und wenn nötig eine Collection von Objecten.
Alle Klassen die sich für eine bestimmte Notification interessieren, melden sich bei dem Center als Observer an. Bekommt das Center nun eine Notification, dann schaut es wer sich alles dafür registriert hat und schickt die Notification entsprechend weiter.
Auf diese Art und weise sind die Klassen sauber entkoppelt und hängen nicht über tausend Listener miteinander zusammen.
Das Problem ist, dass das Versenden der Notifications ja über einen zweiten Thread gehen muss, da sonst der aufrufende Task ja geblockt wäre. Wenn ich aber die Notification über einen zweiten Thread verschicke, dann kann der Observer u.U. versuchen eine UI Aktion zu starten, was aber nicht geht das er nicht mehr im MainThread läuft.
Gibt es schon irgendwas fertiges da in Java? Ich habe nichts gefunden. Oder gibt es was anderes das dem Konzept entspricht? Oder wenn nicht, wie löse ich mein Problem?
Gruß
Claus