애그리거트당 하나의 리포지토리
- 리포지토리는 데이터베이스를 업데이트하는 데 사용해야하는 유일한 방법이어야 합니다
- 애그리거트 루트가 불변성과 트랜잭션 일관성을 관리하기 때문에 애그리거트 루트와 리포지토리는 1:1 관계여야 합니다
- 쿼리는 데이터베이스의 상태를 변경하지 않기 때문에 다른 방법으로 처리해도 됩니다(CQRS)
애그리거트와 영속성
- 애그리거트 생성 & 업데이트
- 애그리거트 생성 -> 리포지토리에 추가 -> 애그리거트 또는 DTO 반환
- 애그리거트 찾기 -> 애그리거트 수정 -> 리포지토리에 업데이트
- 여기서 리포지토리가 애그리거트를 수정하는 경우(ID, 생성시간, 수정시간 등)
SetID
와 같이 변경할 수 없는 것을 변경할 수 있는 것 처럼 보이는 메서드를 제공해야할 수 있습니다
UUID
사용 서버시간 사용 등으로 리포지토리에 의한 변경을 피할 수 있습니다
- 애그리거트 찾기
- 리포지토리에서 찾기 -> 애그리거트를 반환
- DAO와 애그리거트가 분리되어 있는 경우 맵퍼를 사용할 수 있습니다