如果我们谈论分层架构。事件调度应该在MessageService.create
函数内部,还是直接在处理程序中进行调度? EventDispatcher
负责通过队列发送推送通知,电子邮件等。
有些人认为解雇(域)事件应该在您的服务层内。但域事件应始终包含经过身份验证的用户等信息。因此,如果我要在我的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 });
}
答案 0 :(得分:0)
除非我弄错了,否则actor
很可能不是您域名的概念,因此并不属于域事件。为审计目的而收集的通用信息更适合事件元数据。
注意你的无所不在的语言。例如,PostCreated { author }
或CaseReviewed { reviewer }
而不是依赖actor
这样的通用概念。
事件元数据通常记录在您的域事件的存储信封上,该信息将在基础结构而非域中处理。