2009-08-20 4 views
4

Hatte einen Code Geruch Moment und konnte nicht entscheiden, ob es OK für eine Klasse Observable und auch ein Observer ist, dachte ich, ich würde hier posten.Ist es für eine Klasse in Ordnung, beobachtbar und ein Beobachter zu sein?

class ObservableAndObserver extends Observable implements Observer { 

// Class is ofcourse registering and receving notifcations on different events 
// effectly actving as a middle man. 

// Is this a pattern in itself? 'middleman-pattern' ?? 

} 

Gedanken? SRP brechen?

Antwort

3

Es ist technisch in Ordnung, aber Sie sollten überprüfen, dass Sie empfangene Benachrichtigungen nicht einfach erneut übertragen. Wenn diese Klasse Klasse 1 beobachtet und dann von Klasse 2 beobachtet wird, versuchen Sie, dass diese Klasse class1 beobachtet.

+0

Danke. In diesem Szenario wird nicht erneut gesendet. – JamesC

1

Ich sehe keinen Grund, warum nicht. Ein konkretes Beispiel wäre jedoch nützlich. Noch besser wäre echter Code, den Sie bereits implementiert haben, den wir kritisieren könnten.

0

Während ich Neil zustimme, könnte ich sehen, dass es ein Code-Geruch ist, weil die Klasse zu viel tun könnte.

0

Solange das Objekt Ereignisse anderer Objekte beobachtet und es von anderen Objekten beobachtet wird, ist es in Ordnung. Aber wenn sich das Objekt selbst beobachtet gibt es wohl etwas wirklich komisches.

Vielleicht hilft ein Code, zu verstehen, ob das Designmuster auf eine seltsame Art und Weise verwendet wurde.

0

Dies ist eine Möglichkeit, wie viele ereignisbasierte Systeme Filter implementieren. Der andere würde in Java eine innere Klasse für eine der Rollen haben, aber das ist häufiger, wenn der Filter mehrere Beobachter mit unterschiedlichen Rollen hat. Wenn Sie also denken, dass es verschiedene Rollen geben könnte, möchten Sie vielleicht, dass es einen Accessor für die Rolle hat, an die Sie gerade denken getObserver() { return this; }, aber das ist wahrscheinlich ein YAGNI und kann später hinzugefügt werden.

1

Es ist in Ordnung :-). Wenn die Klasse ein anderes Klassenereignis abonniert und ihre eigenen Ereignisse auslösen kann, ist das in Ordnung. Sicher kannst du es falsch machen, aber das Konzept der Klasse, nach einer anderen Klasse zu suchen und beobachtbar zu sein, ist in Ordnung.

0

es ist böse. b beobachtet a und benachrichtigt c.

so gibt es ein Stück Code, der sagt a.setValue (...) und etwas in c passiert.

jetzt denken Sie dies: dieser Teil des Codes sollte stattdessen gesagt haben: a.setValue (...); c.doSomething (...);

natürlich muss dieses Stück Code jetzt über a und c wissen, aber mindestens gibt es keine Magie. Alles steht unter der Sonne. Informationen in oo versteckt ist für den Code in setValue (...) nicht im Betrachter/beobachtbaren Muster multipliziert mit 2.

Cheers, L.

0

Sie könnten von der in einer Variante werden verirrt Publisher-Subscriber-Muster genannt Ereigniskanal, die eindeutig im POSA Buch verwiesen wird:

„bei dieser Variante wird ein Ereigniskanal zwischen dem Verlag und seinen Abonnent erstellt und platziert, um Verlage, der Ereigniskanal erscheint als. ein Abonnent, während es für Abonnenten als Herausgeber erscheint ". (S. 341)