1. Entity

1. 정의, 특징

  • 정체성 :
    • 도메인의 다른 객체와 구분되는 고유한 ID가 있다.
  • 변경 가능성 :
    • 엔티티는 변경 가능한 상태를 가질 수 있다.
    • 이는 동일한 ID를 유지하면서 시간이 지남에 따라 속성이 변경될 수 있음을 의미한다.
  • 행동 :
    • 도메인 내에서 상호 작용을 정의하는 행동이나 작업을 캡슐화.
    • 명령 및 이벤트에 응답하고, 비즈니스 규칙을 검증하고, 일관성을 적용하는 작업이 포함된다.

2. 모델링

  • 유비쿼터스 언어에 집중:
    • 도메인 언어 및 비즈니스 전문가가 엔티티가 나타내는 객체를 참조하는 방식과 일치해야 한다.
  • 핵심 비즈니스 개념 식별:
    • 도메인에 중요한 핵심 비즈니스 개념을 식별
    • 이런 개념은 종종 엔티티가 되어 핵심 사용 사례 또는 시나리오를 이행하는 데 중요한 역할을 한다.
  • 정체성 정의:
    • 도메인 내에서 정체성을 확립하기 위한 메커니즘을 명확히 정의
  • 행동 캡쳐
    • 운영과 책임을 정의하여 엔티티의 필수적인 행동을 캡쳐
    • 비즈니스 규칙, 제약 조건에 대한 이해를 기반으로 해야 한다.

3. 다른 요소들과의 관계

  1. 애그리거트 : 일관성 및 트랜잭션 목적을 위해 단일 단위로 처리되는 밀접하게 관련된 객체들의 클러스터인 애그리거트의 일부를 구성
  2. 값 객체 : 값 객체를 포함할 수 있는데, 정체성이 없고 속성으로만 정의되는 객체
  3. 도메인 이벤트 : 엔티티는 도메인 이벤트를 방출하여 도메인 내에서 변경 사항이나 중요한 상황 발생을 알릴 수 있다.

4. 식별자 생성

  1. 특정 규칙
  2. UUID, NanoID
  3. 직접 입력
  4. SerialNumber

5. 규칙

  1. setter 배제
  2. setter를 쓰더라도 private

6. 도메인 용어 사용

  1. Enum 등에 도메인 용어를 직접 사용해서 코드 해석에 드는 노력을 줄일 수 있다.
  2. 최대한 도메인 규칙을 코드로 작성하게 되므로 버그도 준다.