2014-02-11 2 views
0

외부 장치와 통합하려는 웹 UI가있는 CQRS 기반 시스템이 있다고 가정합니다. Arduino 보드를 예로 들어 보겠습니다.CQRS에서 외부 이벤트를 처리하는 방법은 무엇입니까?

기본적으로, 세 가지 시나리오를 생각할 수 :

  1. 사용자가 웹 UI에있는 버튼을 클릭

    는, 아두 이노가 뭔가를 할 것이다.
  2. 사용자가 하드웨어 버튼을 누르면 도메인이 반응하고 UI가 업데이트됩니다.
  3. 사용자가 하드웨어 버튼을 누르면 UI가 업데이트됩니다.

어떻게 이러한 시나리오를 모델링합니까?

  1. 이것은 매우 쉽습니다. UI는 명령을 내리고 비즈니스 로직이 실행되며 이벤트를 내고 Arduino는 이벤트를 수신합니다. 기본적으로 Arduino는 이벤트 비정규 기자재에 지나지 않습니다. 이것이 올바른 접근 방법입니까?

  2. Arduino는 명령을 내리고 명령 버스로 보내며 시나리오 1과 동일한 절차를 실행합니다. 기본적으로 CQRS 시스템에서 명령의 출처가 달라지는 것은 아닙니다 다른 웹 UI.

  3. 이것은 내가 정말로 확신 할 수없는 곳입니다. Arduino가 버튼 프레스 자체를 처리하고 응답으로 LED가 깜박이라고 가정합니다. 난 단지 내 응용 프로그램이 "LED가 깜박 거리고있다"라는 사실을 알리고 싶습니다. 이것은 명령이 아닙니다 (이미 깜박이는 것처럼), 대신 이벤트입니다. 이 이벤트로 무엇을합니까? 단순히 이벤트 저장소에 저장하고 도메인을 우회합니까? 이것은 나에게 끔찍하게 틀린 것처럼 보입니다. 일치하는 이벤트에 1 : 1로 설정된 의사 명령을 내 보냅니 까? 이것은 작동 할 것이고 도메인을 우회하지는 않지만 실제로는 명령이 아니기 때문에 잘못 생각됩니다. 어떻게해야합니까?

이러한 것에 대한 조언이 있으십니까?

+0

읽기/쓰기 모델에 대해 더 많이 말할 수 있습니까 (동일, 다름 ...)? 한 가지 접근법은 명령을 처리 한 후에 수행 할 수 있습니다 ... 결과를 읽기 모델 (Arduino 보드의 모델 읽기)로 Dernormlize하고 보내십시오 (또는 요청하십시오) – rad

답변

0

1. 도메인에서 상태가 변경되지 않으면 Arduino 이벤트를 수신하는 이벤트 처리기 (ui 어쩌면 websocket을 사용하여 업데이트)를 사용하십시오.
2. Arduino 이벤트를 수신하는 무용담을 사용하고 도메인에서 상태가 변경되어야하는 경우 명령을 실행하십시오.

UI는 도메인의 문제가 아닙니다. 따라서 옵션 1을 선호합니다.

관련 문제