2017-10-27 3 views
4

Ich bin neu in CQRS und ich lese über Projektionen und Projektoren auch Reaktoren, aber meine Ressource deckt es nicht gründlich ab. Kann jemand Reaktoren im Event-Sourcing gründlich definieren oder mir einen Link oder ein Buch zum Lesen geben? Meine Hauptfragen sind:Was sind Reaktoren/Reaktionen im Event-Sourcing?

  • was sind Reaktoren?
  • Was ist die Struktur von Reaktoren?
  • Wie implementieren wir Reaktoren?
+1

Ich weiß nicht, ob es eine gemeinsame Definition gibt, aber für uns Reaktoren/Reaktionen sind einfach Ereignisverbraucher, die andere Dienstleistungen auslösen, wenn bestimmte Ereignisse auftreten. https://serialized.io/docs/getting-started/reactions/ – hammarback

+0

@hammarback das ist richtig, aber ich wünschte, es gibt eine bessere Quelle, danke für Ihre Hilfe –

Antwort

1

Ein Vorsprung ist eine Funktion, die ein Domain-Ereignis empfängt und wandelt sie zu einer Aktion auf einer Liste, Baum, Graph, was auch immer ...

Die Idee dabei ist, dass Sie die semantische Domäne Ereignisse wollen Speichern Sie sie und können Sie sie wiedergeben, aber Sie benötigen verschiedene Interpretationen von ihnen, um sie effizient abzufragen. Daher benötigen Sie eine Projektion, die besagt, dass das Domänenereignis X INSERT oder UPDATE oder DELETE für eine bestimmte Ansicht bedeutet.

Eine Projektion ist also im Grunde eine Zuordnung zwischen Domänenereignissen und CRUD-Operationen. Sie können auch sagen, dass eine Projektion eine von vielen Interpretationen eines Domänenereignisses ist.

Jetzt müssen möglicherweise Aktionen als Reaktion auf ein Domänenereignis erforderlich sein, die nicht mit der Aktualisierung einer Tabelle zusammenhängen. Wenn Sie beispielsweise ein Ereignis userLoggedIn erhalten, möchten Sie möglicherweise eine E-Mail an den Benutzer senden. Es ist wie ein einfaches wenn dies dann das Regel. Dies nennt man im Grunde eine Reaktion. Sie nur reagieren auf benutzerdefinierte Weise auf das Domain-Ereignis.

Die Struktur eines Reaktors (die Komponente, die reagiert) ist daher sehr ähnlich der eines Projektors. Der einzige Unterschied besteht darin, dass ein Reaktor das Lesemodell nicht aktualisiert, aber jede beliebige gewünschte Aktion ausführt.

Mit anderen Worten: Eine Projektion ist eine besondere Art von Reaktion, bei der es immer darum geht, das gelesene Modell zu aktualisieren. Da dies so üblich ist, haben Sie ein dediziertes Muster dafür, aber generell: Wenn Sie etwas als Reaktion auf ein Ereignis tun, ist dies eine Reaktion.

Die Frage, wie Reaktoren zu implementieren, ist schwer zu beantworten, ohne weitere Details zu haben. In wolkenkit, einem CQRS- und Event-Sourcing-Framework für JavaScript und Node.js, sind Reaktoren nichts als Flüsse. Flows können entweder stateless flows oder stateful flows sein, je nachdem, ob sie sich selbst enthalten.

Ein einfaches Beispiel (die natürlich spezifisch für wolkenkit ist) kann wie folgt aussehen:

'use strict'; 

const when = { 
    'userManagement.user.loggedIn' (event, mark) { 
    // ... 
    mark.asDone(); 
    } 
}; 

module.exports = { when }; 

(Disclaimer: Ich bin einer der Autoren von wolkenkit, so nehmen Sie bitte die Beispiele mit einem Körnchen Salz.)

Verwandte Themen