두 객체가 존재할 때, 똑같은 속성을 가지고 있을 때 구분이 필요하지 않으면 VALUE OBJECT
객체 자체가 명확하게 식별성을 가져서 ENTITY
로 구분할 수도 있음 (사람, 화물 번호)
두 객체가 동일한 속성값을 가진다고 가정했을 때, 두 객체가 구분되어야 한다면 ENTITY
가 될 수 있음
자체적인 식별성이 존재하는 것은 자체적인 AGGREGATE
의 루트가 되어야 한다.
특정 AGGREGATE
의 루트가 없이 존재하지 않는 개념들이 있다면, 같은 AGGREGATE
로 분류될 수 있다.
ENTITY
가 두 개의 AGGREGATE
에 모두 걸쳐있다면, 별도의 AGGREGATE
로 추출되어서 자체적인 AGGREGATE
의 루트가 되어야 한다.
AGGREGATE
의 루트와 관련된 엔티티에 관한 작업(삽입, 수정, 삭제)에서 경합이 발생할 수 있는데, 경합을 해소하기 위한 이유로 내부 ENTITY를 다른 AGGREGATE
로 분류할 수 있다.
두 개의 AGGREGATE
가 1:N 연관관계가 존재할 때, N에 입장에서는 새로운 ENTITY
가 발생하면, 1의 AGGREGATE
에 추가되어야 한다. 이 순간에 1의 AGGREGATE
에 대한 경합이 발생할 수 있다.
이 경우 해결책으로, N의 AGGREGATE
에 REPOSITORY
를 추가하여 직접 저장할 수 있도록 하고, 1의 AGGREGATE
에서는 질의를 통해서 N 컬렉션을 반환하는 형태로 구성할 수 있다. 두 AGGREGATE
는 더 이상 경합을 겪지 않을 수 있다.
추가적으로, AGGREGATE
는 AGGREGATE
루트를 통해서만 접근이 가능해야 하는 측면에서도 경합이 발생하는 구조는 옳지 않아보인다.