2017-10-26 1 views
0

우리는 계층화 된 아키텍처에 대해 이야기하고 있습니다. 이벤트가 MessageService.create 함수 내부에 있어야합니까? 아니면 핸들러에서 직접 처리해야하는 것이 일반적입니까? EventDispatcher은 푸시 알림, 이메일 등을 대기열을 통해 전송합니다.NodeJS의 계층화 된 아키텍처

어떤 사람들은 발사 (도메인) 이벤트가 서비스 계층 내부에 있어야한다고 주장합니다. 그러나 도메인 이벤트에는 항상 인증 된 사용자와 같은 정보가 있어야합니다. 따라서 내 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

'도메인 이벤트는 항상 인증 된 사용자와 같은 정보를 포함해야합니다. '- 왜? 일반적으로 또는 귀하의 맥락에서 의미합니까? – guillaume31

답변

0

내가 잘못 생각하지 않는 actor 도메인의 개념 가능성이 아니므로 실제로 도메인 행사에 속하지 않습니다. 감사 목적으로 수집 된 일반 정보는 이벤트 메타 데이터과 같이 적합합니다.

유비쿼터스 언어에주의하십시오. 예를 들어, actor과 같은 일반적인 개념이 아닌 PostCreated { author } 또는 CaseReviewed { reviewer }입니다.

이벤트 메타 데이터는 대개 도메인이 아닌 인프라에서 처리되는 도메인 이벤트의 저장소 봉투에 기록됩니다.