2017-10-26 1 views
0

Wenn wir über geschichtete Architektur sprechen. Sollte die Ereignisvermittlung innerhalb der MessageService.create Funktion stattfinden oder ist es üblich, sie direkt im Handler zu haben? Die EventDispatcher ist verantwortlich für das Senden von Push-Benachrichtigungen, E-Mails usw. über eine Warteschlange.Geschichtete Architektur in NodeJS

Einige Leute argumentieren, dass das Abfeuern von (Domänen-) Ereignissen innerhalb Ihrer Serviceschicht erfolgen sollte. Domänenereignisse sollten jedoch immer Informationen wie den authentifizierten Benutzer enthalten. Wenn ich also Ereignisse in meinem MessageService auslösen würde, müsste ich immer den authentifizierten Benutzer übergeben, was meiner Meinung nach etwas übertrieben ist.

Der Nachteil davon ist, dass der Handler jetzt an HTTP gekoppelt ist. Wenn ich also einen Stapel von Nachrichten über ein Knotenscript oder etwas erstellen möchte, wird message.created nicht ausgelöst, da es nicht Teil des Dienstes ist Logik.

module.exports = async function createMessageHandler(request, reply) { 
    request.log(['message', 'create']); 

    const message = await MessageService.create(request.payload); 

    EventDispatcher.emit('message.created', { 
    message: message, 
    actor: request.auth.credentials, 
    }); 

    return reply({ data: message }); 
} 
+0

'Domain-Ereignisse sollten immer Informationen wie der authentifizierte Benutzer enthalten - warum? Meinst du im Allgemeinen oder in deinem Kontext? – guillaume31

Antwort

0

wenn ich nicht irre ein actor ist höchstwahrscheinlich kein Konzept Ihrer Domain und daher nicht wirklich in Domain-Ereignisse gehören. Generische Informationen, die zu Prüfzwecken gesammelt werden, passen besser als Ereignis Metadaten.

Achten Sie auf Ihre ubiquitäre Sprache. Zum Beispiel PostCreated { author } oder CaseReviewed { reviewer }, anstatt sich auf ein generisches Konzept wie actor zu verlassen.

Ereignis-Metadaten werden normalerweise auf dem Speicher-Envelope Ihres Domain-Ereignisses aufgezeichnet, das in der Infrastruktur und nicht in der Domäne behandelt wird.

Verwandte Themen