Closed jseop-lim closed 1 year ago
DDD 관점에서, 지도어드민 context의 간선과 노드는 하나의 aggregate에 속한다. 노드를 삭제하면 연관된 간선도 함께 삭제되어야 하기 때문이다. root aggregate는 간선이다. 노드가 간선에 속하기 때문에 간선 엔티티를 통해 노드 엔티티를 조작할 수 있기 때문이다.
DDD 관점에서, 지도어드민 context의 간선과 노드는 서로 다른 aggregate에 속한다. 노드를 삭제하면 연관된 간선도 지워지는 것을 제외하면, 노드와 간선은 다른 시점에 다른 이유로 생성된다. 그리고 노드와 간선을 가로지르는 비즈니스 규칙이 없다.
서로 다른 aggregate 간 경계 구분을 위해 간선 엔티티는 노드 엔티티를 ID로 참조하게 만든다.
그럼 노드와 간선의 패키지를 분리해야 하나?
관점 1을 선택한다.
간선은 노드 없이 존재할 수 없다. 또한, 간선과 노드 사이에 비즈니스 규칙이 존재한다. (e.g. 노드 간 간선은 오직 하나)
그리하여 use case에서는 간선 엔티티를 import하여 객체를 생성하고 접근할 수 없으며, 간선 데이터만 따로 edge repository를 통해 영속적으로 저장할 수 없다.