tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
594
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cojote Cojote ist offline Mitglied Gold
    Registriert seit
    Oct 2006
    Beiträge
    110
    Hallo,

    ich suche nach dem wissenschaftlich korrekten Namen für folgende Konstruktion, bzw Design Pattern.

    Innerhalb einer Anwendung existiert eine zentrale Komponente zum Nachrichtenversand. An dieser Komponente können sich Komponenten, die ein EventListener Interface (mit Methode onEvent)implementieren registrieren und ihr Interesse an bestimmten Ereignissen anmelden.
    Aussehen tut das in etwa so:
    eventDispatcher.subscribeTo(MyEvent.class, this);

    Über die zentrale Komponente werden innerhalb der Applikation Nachrichtenobjekte an den Dispatcher versendet. Also:
    eventDispatcher.publish(new MyEvent(...))
    Diese publish-Methode hat die Aufgabe jetzt alle Interessenten zu ermitteln und ihre onEvent() Methoden aufzurufen.

    Ich habe ein wenig gegoogled und bin auf die Begriffe Observer Pattern und publish subscribe Mechanismus gestoßen.
    Observer Pattern ergibt für mich keinen Sinn (kann aber auch sein dass ich nur die konkrete Implementierung des Patterns kenne, die hier so gar nicht passt). Publish Subscribe verbinde ich mit asynchroner Kommunikation, insbesondere mit JMS. Die Kommunikation läuft aber synchron ab.
    Ich weiß ich habe auch die Methoden des eventDispatchers publish und subscribe genannt bin aber mit dieser Bezeichnung nicht wirklich zufrieden, weil zumindest ich sie so als asynchron missverstehe.


    Hat vielleicht jemand nen Tipp für mich?
    Geändert von Cojote (08.10.08 um 14:18 Uhr)
     

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Hallo,

    bei einem ObserverPattern ist es üblicherweise so, dass der Observer selbst sich an der zu überwachenden Komponente registriert und die Komponente einfach alle Observer benachrichtigt, ohne diese genau zu kennen. Daher würde ich bei deinem Konstrukt nicht wirklich Observer als Namen wählen. Der Zweck ist wahrscheinlich ein ähnlicher, die Umsetzung allerdings nicht wirklich ein Observer.

    Publish Subscribe (P/S) halte ich für sinnvoller, aus folgenden Gründen:

    1) P/S sagt erstmal nichts über asynchronität aus. Das Pendant im Messagingbereich zu P/S ist Broadcast (informieren aller Komponenten, keine registrierung auf ein spezielles Event). Bei JMS wird fälschlicherweise oft angenommen, dass es implizit asynchron sei. JMS KANN asynchron sein, kann aber auch im Request/Response Modus benutzt werden einfach um ein P/S zu realisieren
    2) Du hast einen "Man in the middle", sprich, jemanden der das ganze orchestriert.
    3) Charakteristisch für ein P/S ist eine Art Delimiter, mit dem man angibt, an welchen Nachrichten bzw. Events man interessiert ist. In Termen des Messagings ist das meist eine Queue oder ein Topic auf das sich ein Listener (Subscriber) registriert, das kann wie in deinem Fall auch einfach ein Typ sein.

    Ergo halte ich P/S für den "richtigen" Titel. Wichtig ist hierbei, dass es wie so oft kein 100%iges richtig oder falsch gibt. Programmierkonstrukte können in leicht anderem Licht einen anderen Namen bekommen. Daher ist bei Patterns auch der Kontext sehr wichtig. Wenn man den Fokus bei deinem Konstrukt z.B. darauf legt, dass sich Komponenten dynamisch beim Dispatcher registrieren können, kann man da auch ein Plugin Pattern sehen. Je nachdem was die Kompontente tut kann sie wiederum vielleicht ein Adapter sein usw. Lange Rede kurzer Sinn: Patterns sind kein exclusive or, sondern eher eine Suppe, wobei jedes Pattern eben durch bestimmte Charakteristika bestimmt ist die hervorgehoben werden sollen, wenn man von ihm spricht.

    Gruß
    Ollie
    Geändert von Oliver Gierke (08.10.08 um 15:51 Uhr) Grund: Typos
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  3. #3
    Cojote Cojote ist offline Mitglied Gold
    Registriert seit
    Oct 2006
    Beiträge
    110
    Danke Ollie für die Antwort, damit kann ich etwas anfangen. Publish Subscribe habe ich auch schon öfter im Zusammenhang mit synchronität gelesen. Mit deiner Meinung bleibe ich deshalb dabei.

    Könntest du mir noch kurz erklären inwiefern mit JMS aus synchrone Kommunikation möglich ist? Ich dachte immer der JMS Request/Response Mechanismus sei sowas wie asynchronität mit Rückantwort. Als Sender sendet, rennt danach weiter. Empfänger empfängt und verarbeitet und schickt ne Rückantwort über ne Temp-Queue.
    Oder meintest du, dass Request/Response dazu verwendet werden kann um synchrone Kommunikation zu implementieren, indem man beispielsweise den Sender nach senden der Nachricht manuell blockiert, wartet bis die entsprechende Rückantwort eintrifft und den Sender damit weiterrennen lässt?
    Ich frage aus Interesse, weil ich schon länger nichts mehr mit JMS gemacht hab und auch nicht den 100% igen Durchblick hab.
     

Ähnliche Themen

  1. ab 2011, PHP und eZ Publish Spezialisten / Entwickler / Developer gesucht
    Von kwiegand im Forum Stellenangebote (entgeltlich)
    Antworten: 0
    Letzter Beitrag: 13.12.10, 13:30
  2. Observer Pattern
    Von chuvak im Forum Java Grundlagen
    Antworten: 6
    Letzter Beitrag: 13.08.10, 13:06
  3. Observer-Muster
    Von DerMauri im Forum Java
    Antworten: 12
    Letzter Beitrag: 04.09.07, 15:24
  4. Publish Funktion in VS. Was macht sie und was nicht?
    Von BeaTBoxX im Forum Coders Talk
    Antworten: 1
    Letzter Beitrag: 26.04.07, 09:04
  5. Publish-Settings
    Von Stephan Zesiger im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 03.09.02, 14:54