도메인 주도 개발 시작하기을 읽고 인상 깊었던 내용을 간단히 정리합니다.
빨간 네모 박스 안에 값들은 개념적으로 ‘받는 사람’을 의미하고 파란 네모 박스 안에 값들은 '주소'를 의미한다
public class Receiver{
private String name;
private String phoneNumber;
public Receiver(String name, String phoneNumber){
this.name = name
this.phoneNumber = phoneNumber;
}
}
public class Address{
private String address1;
private String address2;
private String zipcode;
}
Receiver는 ‘받는 사람’이라는 도메인 개념을 표현한다.
Address는 '주소'라는 도메인 개념을 표현한다.
밸류 타입을 사용함으로써 개념적으로 완전한 하나를 잘 표현할 수 있는 것이다.
public class ShippingInfo {
private Receiver receiver;
private Address address;
}
벨류 타입의 또 다른 장점은 벨류 타입을 위한 기능을 추가할 수 있다는것이다.
public class Money {
private int value;
public Money add(Money money) {
return new Money(this.value + money.value);
}
public Money multiply(int multiplier) {
return new Money(value * multiplier);
}
}
벨류 타입을 불변으로 구현함으로써 안전한 코드를 작성 할 수 있다.
Money price = ...;
OrderLine line = new OrderLine(product, private, quantity);
// 만약 price.setValue(0)로 값을 변경할 수 있다면?
Order order = new Order();
order.setOrderLine(lines);
order.setShippingInfo(shippingInfo);
order.setState(OrderState.PREPARING);
public enum OrderState { ❌
STEP1, STEP2, STEP3, STEP4, STEP5, STEP6
}
public enum OrderState { ⭕️
PAYMENT_WAITING, PREPARING, SHIPPED, DELIVERING, DELIVERY_COMPLETED;
}