Wie Controller und View über weak references, z.B. via EventBus, verbinden?

DarthShader

Erfahrenes Mitglied
Hallo,

ich würde für meine GUI/Frontend-Entwicklung mit Swing gerne das Konzept der Listener loswerden (jedenfalls die meisten, wie Action- oder MouseListener). Primär denke ich daran, den EventBus (http://www.eventbus.org) zu verwenden. Eine Swingkomponente einer View könnte so ein eigenes MouseClick-Event auf dem EventBus schicken, und der entsprechende Controller für die View empfängt diese Events. Theoretisch funktioniert dies auch.

EventBus unterstützt dabei auch WeakReferences; Strong References ist ja ein Problem was mit normalen EventListenern von Swing bekannt ist (Objekte können nicht vom GC weggeräumt werden, weil Listener noch darauf zeigen).

Aber gerade diese WeakReferences sind mein gedankliches Problem:

Wenn ich dem Model-View-Controller Pattern folge, es also z.B. jeweils eine Klasse dafür gibt, und der Controller ist lose über EventBus/WeakReferences an die View gekoppelt, was hindert den Java Gerbage Collector dann daran, einfach meinen Controller wegzuräumen?

Einen Schritt weiter gedacht, wären dieser Controller und die View z.B. einfache Beans in einem DI Container wie Spring. Beide werden instanziiert und die View wird irgendwann/-wo von mir der Swing-Containment-Hierarchie zugeordet (-> die View wird also irgendeinem Panel oder dem JFrame hinzugefügt). Solange also das "Hauptfenster" nicht weg ist, wird die View auch nicht vom GC weggeräumt (was ja in Ordnung ist). Aber mein Controller, der statt EventListenern nun den EventBus verwendet, wird eigentlich von niemanden mehr referenziert - und damit irgendwann vom GC weggeräumt.

(Ich weiß, dass EventBus auch Strong References beherrscht, aber darum geht es mir ja unter anderem, dieses zu vermeiden, sonst könnte ich auch einfach EventListener verwenden.)

Dies ist mein gedankliches Dilemma - WeakReferences klingen zwar gut, aber wie sieht sowas in der Praxis aus? Wie soll ich via EventBus einen Controller mit der entsprechenden View "verbinden" (oder nicht nur auf EventBus bezogen, man könnte ja auch einen WeakEventListener erstellen)?

Oder was könnte ich tun, damit der Controller nicht einfach weggeräumt wird? Einfach irgendeine Art von künstlicher Referenz zu verwenden, klingt nicht so gut.


Über einen Gedankenaustausch zu dem Thema würde ich mich sehr freuen


Vielen Dank!
 
Hallo,

gibt es niemanden, der eine Art EventBus für die GUI Programmierung verwendet? Das ist ja ein Konzept, dass auch in anderen Bereichen auf Interesse stößt, z.B. bei GWT und EventBus, wie ein Vortrag auf der JavaOne zeigte.

Ich brauche das für Swing, und würde gerne die EventBus Geschichte explorieren, aber weiß noch nicht so recht, wohin das führen soll, gerade angesichts der offenen Fragen oben.

Keiner da, der sich mit dem Thema schonmal auseinander gesetzt hat?
 
Zurück