Если мы говорим о многоуровневой архитектуре. Должна ли диспетчеризация событий находиться внутри функции MessageService.create
или обычно она выполняется непосредственно в обработчике? EventDispatcher
отвечает за отправку push-уведомлений, электронных писем и т. д. через очередь.
Некоторые люди утверждают, что события запуска (домена) должны происходить внутри вашего сервисного слоя. Но события домена всегда должны содержать такую информацию, как аутентифицированный пользователь. Поэтому, если бы я запускал события внутри своего MessageService
, мне всегда нужно было бы передавать аутентифицированного пользователя, что, я думаю, немного излишне.
Недостатком этого является то, что обработчик теперь связан с HTTP, поэтому, когда я хочу создать пакет сообщений с помощью сценария узла или чего-то еще, message.created
не будет запущен, потому что это не является частью логики службы.
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 });
}