[architecture Series Ddd] 03.01.entity
February 16, 2025
1. Entity
1. 정의, 특징
- 정체성 :
- 도메인의 다른 객체와 구분되는 고유한 ID가 있다.
- 변경 가능성 :
- 엔티티는 변경 가능한 상태를 가질 수 있다.
- 이는 동일한 ID를 유지하면서 시간이 지남에 따라 속성이 변경될 수 있음을 의미한다.
- 행동 :
- 도메인 내에서 상호 작용을 정의하는 행동이나 작업을 캡슐화.
- 명령 및 이벤트에 응답하고, 비즈니스 규칙을 검증하고, 일관성을 적용하는 작업이 포함된다.
2. 모델링
- 유비쿼터스 언어에 집중:
- 도메인 언어 및 비즈니스 전문가가 엔티티가 나타내는 객체를 참조하는 방식과 일치해야 한다.
- 핵심 비즈니스 개념 식별:
- 도메인에 중요한 핵심 비즈니스 개념을 식별
- 이런 개념은 종종 엔티티가 되어 핵심 사용 사례 또는 시나리오를 이행하는 데 중요한 역할을 한다.
- 정체성 정의:
- 도메인 내에서 정체성을 확립하기 위한 메커니즘을 명확히 정의
- 행동 캡쳐
- 운영과 책임을 정의하여 엔티티의 필수적인 행동을 캡쳐
- 비즈니스 규칙, 제약 조건에 대한 이해를 기반으로 해야 한다.
3. 다른 요소들과의 관계
- 애그리거트 : 일관성 및 트랜잭션 목적을 위해 단일 단위로 처리되는 밀접하게 관련된 객체들의 클러스터인 애그리거트의 일부를 구성
- 값 객체 : 값 객체를 포함할 수 있는데, 정체성이 없고 속성으로만 정의되는 객체
- 도메인 이벤트 : 엔티티는 도메인 이벤트를 방출하여 도메인 내에서 변경 사항이나 중요한 상황 발생을 알릴 수 있다.
4. 식별자 생성
- 특정 규칙
- UUID, NanoID
- 직접 입력
- SerialNumber
5. 규칙
- setter 배제
- setter를 쓰더라도 private
6. 도메인 용어 사용
- Enum 등에 도메인 용어를 직접 사용해서 코드 해석에 드는 노력을 줄일 수 있다.
- 최대한 도메인 규칙을 코드로 작성하게 되므로 버그도 준다.