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 });
}
'Domain-Ereignisse sollten immer Informationen wie der authentifizierte Benutzer enthalten - warum? Meinst du im Allgemeinen oder in deinem Kontext? – guillaume31