도메인 주도 설계 구현-엔터티(1)

도메인 주도 설계 구현

엔터티(entity)

개발자는 도메인 보다 데이터에 초점을 맞추는 경향이 있다. 소프트웨어 개발에 관한 대부분의 접근법이 데이터베이스에 중점을 두기 때문에
DDD를 처음 접하는 사람에게 일어날 수 있는 현상이다.

풍부한 행동을 바탕으로 도메인 개념을 설계 하지 않고 주로 데이터의 속성과 연결을 먼저 생각하려 한다.
이로 인해 도메인 모델안에 있는 거의 모든 개념이 게터와 셋터 메소드를 너무 많이 갖고 있는 엔터티로 코딩된다.

엔터티(entity)를 사용하는 이유

우리가 도메인 개념의 개별성에 신경을 쓸 때 그러니까 한 개념을 시스템 내의 나머지 모든 객체와 반드시 구분해야 하는 제약 조건이 있을때 이를 엔터티로 설계 한다.

엔터티와 값 객체의 차이는 고유 식별자와 변화 가능성이라는 특징에 있다.

엔터티가 모델링 도구로 적합하지 않을때도 있다. 대부분 개념은 값으로 모델링해야 한다.

1
2
3
객체를 특성(attribute)이 아니라 식별자에 따라 구분한다면, 모델을 정의할때 이를 우선적으로 다뤄라
클래스의 정의를 단순하게 유지하면서 수명주기의 지속성과 식별자에 집중하자.
형태나 히스토리 상관없이 각 객체를 구분하는 수단을 정의하라.

고유 식별자

엔터티의 설계 초기엔 고유 식별자 중심을 이루는 우선적인 특성과 행동을 비롯해 이를 쿼리하는 데 도움을 주는 요소에 의도적으로 집중하고
우선적인 사항을 마무리할 때까진 다른 특성이나 행동을 의도적으로 무시한다.

시간이 흘러도 고유성의 보존됨을 보장해줄 수 있도록 식별자를 구현하는 다양한 옵션의 확보는 아주 중요한 일이다.

값 객체는 고유 식별자의 홀더 역활을 할 수 있다. 값 객체는 불변하기 때문에 식별자의 안정성이 확보되고 식별자의 유형에 따른 모든 행동은 중앙집중화된다.
식별자 행동의 중심점이 생기면 단순함의 정도와는 상관없이 모델의 다른 부분이나 클라이언트로 노하우가 새나가는 것을 막아준다.

참조