2017-11-25 13 views
0

내 도메인에서 사용자 등록 프로세스가 발생하는 동안 사용자가 전자 메일/암호 또는 연결된 소셜 네트워크 계정을 사용하여 생성되면 사용자 로그인이 수행됩니다.이벤트 소싱 : 이벤트 더 자세히 나누기

I이 (참조) 이벤트를 등록하는 방법 두 가지 옵션 :

  • 여러 이벤트 UserCreated, UserPasswordSet, UserExternalAccountLinked (모든 정보, 암호 해시, 외부 사회 계정을 포함)

    • UserRegistred 이벤트 , 두 번째 옵션에서 UserLoggedIn

    이벤트 (UserPasswordSet, UserExternalAccountLinked, UserLoggedIn) 해당 작업을 수행하는 동안 나중에 나타날 수 있습니다.

    본인은 질문과 옵션이 주관적 일 수 있음을 이해하지만, 숙련 된 ES/DDD 사용자의 의견을 듣고 싶습니다.

  • 답변

    0

    필자는 경험이 있다고 주장하지 않지만 복잡한 단순 이벤트가 아닌 단순한 출력 다중 이벤트라고 생각합니다.

    찬반은 다음과 같습니다

    • 단순성 - (총 자체를 포함) 계획과 이벤트 핸들러
    • 적은 이탈에 대한 세밀한 이벤트뿐만 아니라 복잡한 UserRegistered 이벤트를 알아야 할 필요는 없습니다 이벤트 스키마 - 예 이벤트가 더 나은 사용자 등록

    I에 관련된 상태 변경의 순서를 캡처 - 당신이 당신의 인증 이벤트의 세부 사항을 변경하는 경우

  • 선명도 (변경할 UserRegistered 이벤트가 없기 때문에), 적은 수의 이벤트 유형을 변경해야합니다 사소한 죄책감을 생각할 수 있습니다 :

    • 비 원자 등록. 예측은 단일 사용자 등록 이벤트를 처리하고 클라이언트가 즉시 쿼리 할 수있는 상태에서 읽기 모델을 원자 적으로 만들 수 있습니다. 여러 이벤트가있는 경우 읽기 모델은 하나씩 처리 할 수 ​​있습니다. 즉, 사용자가 임시로 절반 등록 상태가되어 클라이언트에서 처리하고 싶지 않을 수 있습니다.
      • 이것은 읽기 계획이 모든 사용 가능한 이벤트를 소비하고 단일 트랜잭션에서 업데이트되도록함으로써 이벤트 시퀀스가 ​​단일 트랜잭션 만 커밋하도록하므로 피할 수 있습니다. 따라서 반 등록 된 사용자는 볼 수 없습니다 . 어떤 경우이든 더 효율적이지만 독서 점에 따라 간단하지 않을 수도 있습니다. 서비스
    를 조회 할 때
  • 또는 자동 반 등록 된 사용자를 필터링 할 수 있습니다