Frage

Ich versuche zu verstehen, wenn es um die Verwendung Veranstaltungen geeignet ist. Es scheint mir, dass ein Ereignis kann als ein SQL-Trigger gedacht werden. Dann ist es richtig, ein Ereignis von einem Domain-Objekt ausgelöst zu verwenden, ein anderes zu ändern, oder wird es bedeuten, Mangel an einem gut Design gedacht, wenn wir Ereignisse verwenden, um andere Objektzustände zu ändern? Oder sollte es ein Mediator-Klasse sein, durch welche diese Objekte einander ändern sollte? Wie kann ich entscheiden?

Gibt es Vor- und Nachteile, dass ich etwa hier betroffen sein, wie, wie die Verwendung von Ereignissen Testbarkeit beeinflussen?

War es hilfreich?

Lösung

Veranstaltungen sind so konzipiert, einen Bereich von einem anderen .

abzukoppeln

Dabei geht es manchmal etwas asynchrones Verhalten , die ein zusätzliches Merkmal sein kann, aber nicht zwingend. Zum Beispiel, wenn Sie eine schnelle Rückmeldung an den Benutzer in einer GUI, und ein Teil des Codes zu schaffen, läuft zu langsam (es sei denn, es vor ein Feedback abgeschlossen werden muss), dann kann der regulären Anruf schnell Codes auszuführen, und erstellen Sie ein Ereignis für die andere, dann Feedback GUI zur Verfügung stellen, ohne warten das Ereignis tatsächlich verarbeitet werden. Dieses Ereignis wird in einer Warteschlange gespeichert ist, und ein oder mehr Threads verarbeiten, dass Queue in ihrem eigenen Tempo.

Für synchrone Ereignisse, es ist wirklich nützlich für die Zwischenmodulkommunikation, wobei die beiden Module Kompilierung-Abhängigkeiten nicht auf einander haben . Beide können wissen, über ein Ereignis-Klasse und ein „Ereignis-Router“:

  • ein Modul erstellt ein Ereignis und rufen Sie den Router,
  • kennt der Router (aus früheren Konfiguration), was andere Modul es erhalten soll, und an das Empfangsmodul senden.
  

Weder Modul wissen über die anderen, damit die Entkopplung Konzept. Sehr gut, wenn beide separat gepflegt werden müssen: -)


Viele Variationen existieren, für einige Themen wie:

  • Rundfunk an viele Empfänger
  • Fail-over (wenn der Empfänger vorübergehend ausfällt, beginnt es wieder, das Ereignis wird geliefert, wenn der Empfänger auf und registriert wieder)
  • Revision : ein technisches Modul können Ereignisse empfangen zu anderen Modulen gezielt und melden sie
  • ...

Ändern von Domain über Ereignisse Objekte scheint ein wenig seltsam . Ist die Entkopplung erwähnten höheren wirklich gerechtfertigt?

Allerdings würde ich nicht eine bestimmte Meinung geben, bevor genauer zu verstehen, was Sie im Sinn haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top