Domain Model은 비즈니스 로직을 객체지향적으로 모델링하는 패턴입니다. 실제 비즈니스 세계의 개념과 규칙을 객체로 표현합니다.
커피숍을 예로 들어보겠습니다:
Order
, Menu
, Payment
, Inventory
등 실제 비즈니스 개념을 각각 객체로 모델링// 주문 도메인 모델
public class Order {
private List<OrderItem> items;
private Customer customer;
private OrderStatus status;
public void addItem(MenuItem item, int quantity) {
validateStock(item, quantity);
items.add(new OrderItem(item, quantity));
}
public Money calculateTotal() {
return items.stream()
.map(OrderItem::getSubtotal)
.reduce(Money.ZERO, Money::add);
}
public void process() {
validateOrder();
updateInventory();
sendNotification();
}
}
// 고객 도메인 모델
public class Customer {
private String name;
private Membership membership;
private List<Order> orderHistory;
public Money calculateDiscount(Money amount) {
return membership.applyDiscount(amount);
}
}