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