[DDD START] 1장 도메인 모델 시작
08 Jun 2019Source
Domain
- 소프트웨어로 해결하고자 하는 문제 영역
- 도메인은 하위도메인으로 나눌 수 있음
- 예)온라인 서점 - 도메인
- 주문 - 하위 도메인
- 결제 - 하위 도메인
- 배송 - 하위 도메인
- 예)온라인 서점 - 도메인
도출한 모델
도출한 모델은 크게 Entity와 Value로 구분할 수 있다
Entity
- 식별자를 갖는다.
- 예)주문 도메인은 엔티티로서 orderNumber를 식별자로 갖는다.
Value 타입
- 개념적으로 완전한 하나를 표현
- 예) 주문자 정보(Receiver)
public class Receiver {
private String name;
private String phoneNumber;
}
public class ShippingInfo {
private Receiver receiver;
}
- 의미를 명확하게 표현하기 위해
- 의미와 관련된 내용을 추가할 수 있다.
- 돈은 음수가 없다
- price값은 변경할 수 없다 등
- 의미와 관련된 내용을 추가할 수 있다.
public class Money {
private int value;
public Money(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
public class OrderLine {
private Money price;
}
도메인 모델에 set 메서드 넣지 않기
set 메서드의 문제
- 도메인의 핵심 개념이나 의도를 코드에서 사라지게 한다.
- 도메인 객체를 생성할 때 완전한 상태가 아닐 수도 있다.
- 생성 시점에(생성자를 통해) 필요한 것을 모두 전달해 주어야 한다.
// set 메서드로 데이터를 전달하도록 구현하면
// 처음 Order를 생성하는 시점에 Order는 완전하지 않다
Order order = new Order();
// set 메서드로 필요한 모든 값을 전달해야 함
order.setOrderLine(lines);
order.setShippingInfo(shippingInfo);
// 주문자(Orderer)를 설정하지 않은 상태에서 주문 완료 처리
order.setState(OrderState.PREPARING);