2

customer 엔티티와 user 엔티티가있는 시스템이 있습니다.스텝 마법사 microservices 사용 중 UI

Customer은 돈을 지불하는 사람입니다. 각 고객에는 1-N 명의 사용자가 있습니다. 고객에게 사용자 링크가 있습니다.

User 고객이 없으면 존재할 수 없습니다. 사용자 엔터티에 CustomerId가 포함되어 있습니다.

문제는 고객 생성을 위해 특정 UI를 사용하도록 제한된다는 것입니다.

  • 고객에 대한 정보를 입력합니다 : 이름, 성, 주소 등
  • 두 번째 단계는 고객을 위해 사용자를 만들어 고객의 만드는 과정은 UI의 2 단계로 구성됩니다.

기본 아이디어는 2 단계 끝에 고객과 사용자를 만드는 것입니다. 동일한 DB에 두 개의 entite를 모두 저장할 수 있다면 간단 할 것입니다. 나는 하나의 ACID 거래에서 그것을 할 수 있었다. 그것은 모두 또는 아무것도 저장하지 않을 것입니다.

불행히도 마이크로 서비스를 사용합니다. 고객 및 사용자는 자체 저장소가있는 다른 마이크로 서비스입니다. 그리고 두 스토리지는 데이터베이스가 아니며 스토리지에는 트랜잭션 옵션이 없습니다. 그래서 Customer 엔터티는 스토리지 1을 사용하고 User 엔터티는 스토리지 2를 사용합니다.

첫 번째 단계 후에 고객을 저장하도록 제안했습니다. 그런 다음 두 번째 단계 후에 사용자를 저장하십시오. 하지만 두 번째 UI 단계에는 전체 프로세스 중에 생성 된 모든 사용자와 고객을 삭제해야하는 취소 버튼이 있습니다. 제안이 거절되었습니다. 문제는 특정 사용자 이름을 가진 사용자가 이미 존재하는 경우 사용자 나 사용자를 저장하지 않아야한다는 것입니다.

내 질문은 :

  • 얼마나 많은 RootAgregates을해야합니까? 하나 또는 둘?
  • Customers 저장소와 다른 저장소에 사용자를 저장하는 올바른 방법입니까?
  • 그런 경우 올바른 접근 방법은 무엇입니까?

P. 나는 고객 내부에 사용자를 저장하는 아이디어를 좋아하지 않는다. chanhging 사용자의 경우, 나는 고객과 협력해야합니다. 또 다른 문제는 사용자가 전체 시스템에서 고유해야하고 모든 사용자의 목록을 가져와야한다는 것입니다.

P. 나는 Azure Service Fabric과 Actors 모델을 사용하고있다.

+1

강한 일관성을 원하면 서비스 경계가 잘못되었을 수 있습니다. 그렇지 않으면 궁극적 인 일관성 만 기대할 수 있습니다. 기본적으로 프로세스를 전체적으로 추적하고 이벤트를 소비하여 한 상태에서 다른 상태로 전환하는 무언가 (예 : 프로세스 관리자)가 있어야합니다. – plalx

답변

1

몇 개의 루트 애그리 게이트가 있습니까? 하나 또는 둘?

  • 하나의 누적 루트 및 하나의 엔티티가 있습니다.

고객 스토리지 다른 저장 장치에 사용자를 저장하는 올바른 방법인가?

  • 아니요, 아닙니다. 집계마다 저장소가 있어야하기 때문입니다.

집합체 디자인 방법은 Effective Aggregate Design by Vaughn Vernon을 참조하십시오.