Domain Model에 Entity를 정의할 때의 기준과 Best Practice
1. Domain Model에 모든 Entity를 정의하지 않는 이유
- Domain Model은 도메인 로직과 비즈니스 규칙을 중심으로 설계된다.
- 도메인 로직에 관여하지 않는 데이터(예: 생성 시간, 수정 시간)는 Domain Model에 포함하지 않고
infra.entity에 정의한다.
- 도메인 로직과 무관한 데이터를 Domain Model에 포함하면 응집도가 낮아지고 관리가 어려워진다.
2. Domain Model과 Infra Entity의 주요 차이
| 구분 | Domain Model | Infra Entity |
|---|
| 역할 | 비즈니스 로직 표현, 핵심 데이터 관리 | DB와 매핑된 구조 관리, 영속성 처리 |
| 포함 데이터 | 도메인에서 중요한 데이터와 로직만 포함 | DB의 모든 컬럼과 관계 매핑 포함 |
| 관심사 | 비즈니스 중심 | 기술적 세부사항 중심 |
| 위치 | domain.model 패키지 | infra.entity 패키지 |
3. Domain Model에 Entity를 정의할 때 기준
- 도메인 로직에 중요한 데이터만 Domain Model에 정의.
- 도메인 로직과 무관한 데이터(예: 생성 시간, 수정 시간)는 Infra Entity에 정의.
- Aggregate Root 중심으로 설계하며, 핵심 비즈니스 로직을 포함.
4. 실무에서의 Best Practice
4.1. Entity를 분리 설계
- 도메인 로직에 필요한 데이터는 Domain Model에 정의.
- 영속성 관리, 메타데이터 등 도메인 로직과 무관한 데이터는 Infra Entity에 정의.
public class Order {
private OrderStatus status;
private List<OrderItem> items;
public void changeStatus(OrderStatus newStatus) {
}
}
@Entity
public class OrderEntity {
@Id
private Long id;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private String status;
}