저는 DDD로 시작하여 국가 간 일관성을 보장하기 위해 집계 루트가 사용됨을 이해합니다. 하나의 응용 프로그램 서비스에서 여러 집계를 수정해서는 안됩니다.
그러나 다음 상황을 처리하는 방법을 알고 싶습니다.
Products라는 집계 루트가 있습니다.
Group이라는 집계 루트도 있습니다.
둘 다 ID가 있으며 독립적으로 편집 할 수 있습니다.
여러 제품이 같은 그룹을 가리킬 수 있습니다.
제품 그룹을 변경할 수있는 응용 프로그램 서비스가 있습니다.
ProductService.ChangeProductGroup(string productId, string groupId)
- 검사 그룹 존재
- 리포지토리에서 제품 가져 오기
- 그룹 설정
- 제품을 다시 저장소에 씁니다.
그룹을 삭제할 수있는 응용 프로그램 서비스도 있습니다.
GroupService.DeleteGroup(string groupId)
1. groupId가 제공된 groupId로 설정된 리포지토리에서 제품을 가져오고 개수가 0 또는 중단되었는지 확인합니다. 2. 그룹 리포지토리에서 그룹을 삭제합니다. 3. 변경 내용을 저장합니다.
내 질문은 다음과 같은 시나리오입니다.
ProductService.ChangeProductGroup에서 그룹이 존재하는지 확인한 다음 (이것이 있는지)이 확인 직후에 별도의 사용자가 다른 GroupService.DeleteGroup을 통해 productGroup을 삭제합니다. 이 경우 방금 삭제 한 제품에 대한 참조를 설정 했습니까?
다른 도메인 디자인을 사용해야하거나 (필요한 경우 추가 요소 추가) 트랜잭션을 사용해야한다는 점에서 이것이 디자인의 결함입니까?