【问题标题】:Layered Architecture in NodeJSNodeJS 中的分层架构
【发布时间】: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


【解决方案1】:

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

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

事件元数据通常记录在您的域事件的存储信封中,这些事件在基础架构而不是域中处理。

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2018-09-26
    • 2011-04-03
    相关资源
    最近更新 更多