NodeJS中的分层架构

时间:2017-10-26 22:07:18

标签: javascript node.js architecture domain-driven-design

如果我们谈论分层架构。事件调度应该在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 });
}

1 个答案:

答案 0 :(得分:0)

除非我弄错了,否则actor很可能不是您域名的概念,因此并不属于域事件。为审计目的而收集的通用信息更适合事件元数据

注意你的无所不在的语言。例如,PostCreated { author }CaseReviewed { reviewer }而不是依赖actor这样的通用概念。

事件元数据通常记录在您的域事件的存储信封上,该信息将在基础结构而非域中处理。

相关问题