【发布时间】:2017-10-31 23:28:57
【问题描述】:
如果我们谈论的是分层架构。事件调度应该在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 });
}
【问题讨论】:
-
domain events should always contain information like the authenticated user- 为什么?您是指一般情况还是在您的上下文中?
标签: javascript node.js architecture domain-driven-design