2

가끔씩 저는 자료 구매 및 판매가있는 "이벤트 소싱"(비즈니스 이벤트 저장)을 사용하는 시스템에서 작업하고 있습니다. 어떤 시점에서 가격 및 비용 정보가 포함 된 보고서가 생성됩니다.조정 이벤트를 재생하십시오.

내 고객 중 한 명이 나를 부르며 "비용이 잘못되었습니다. 내게는 이익에서 나온 규칙이 이쪽"이라고 말하면서.

이 특정 사례에 맞게 처리기를 추가하거나 규칙을 변경하고 이벤트를 재생할 수 있습니다.

하지만 제 질문은 올바른 접근 방식 (또는 적어도 더 나은 방법)입니다.

+0

죄송합니다, 그리고 나를 위해 이것은 실제 사용 사례입니다. –

답변

1

이벤트 소스 시스템에서 이벤트는 변경 불가능합니다. 이는 일어난 일의 간단한 사실입니다. 사건의 역사를 다시 쓰는 일은 단순히하지 않는 것입니다 [1].

이러한 이벤트를 기반으로 결과를 유도하는 계산 논리를 변경하는 것은 정상적인 작업입니다. 이는 소싱이 가능할 때조차 중요한 핵심 중 하나입니다.

실제로 코드를 변경하거나 나란히 알고리즘을 제공할지 여부는 선택의 문제입니다. 원본이 사실상 버그 (사례와 유사하게 들릴 경우) 인 경우 코드를 변경하십시오. 그렇지 않은 경우 새 것을 작성하십시오.

경우에 따라 (일반적으로 권장하지 않음) 항상 원래 이벤트의 모든 것을 처리합니다. 그렇다면 유도 논리를 변경하면됩니다. 멀리

  1. 타격 : 당신이 이벤트 을 예상하고 영구 저장소에 denormalised, 상황이 버그를 나타내는 결정 한 경우

    는 정상적인 접근 방식이다 의도 대안 도출이는 놀이로 오는

주를 산출하기 위해 이벤트 denormalised 상태를

  • 재생을 기존 사용자의 경우 현재 대체 된 기준에 따라 계산 된 값을 보유하는 비 일시적인 비정규 화 상태 저장소가 있어야합니다. (비정규 화 된 상태를 메모리 내장 숨김에 투영하는 것은 완전히 유효합니다. 이러한 경우에는 '불어나는 것'이 더 간단합니다.).

    또 다른 시나리오는 스냅 샷 최적화를 구현 한 경우입니다.이 경우 다른 방식으로 비정규 화를 재개발합니다.

    [1] 예 거기는 정당화 될 수 이국적인 경우가 있지만 그는 nonconstructive 질문은, 내가 DDD/CQRS 및 ES에 새로운 해요 it'is 경우 0.001 %의 경우를

  • +1

    이러한 이벤트를 기반으로 결과를 얻는 계산 논리를 변경하는 것은 정상적인 작업입니다 (소싱이 가능할 때조차도 중요한 작업 중 하나입니다). 그게 다야, 고마워. –

    관련 문제