# 1부-동작하는-도메인-모델-만들기

> p20 ... 프로그래머와 그 밖의 관련된 모든이가 초과 예약의 특성을 단순히 불분명한 계산에 불과한 것이 아니라 별개의 중요한 업무 규칙임을 알아야할 것이다.

```java
// as-is
public int makeBooking(Cargo cargo, Voyage voyage) {  
  
    double maxBooking = voyage.capacity() * 1.1;  
  
    if ((voyage.bookedCargoSize() + cargo.size()) > maxBooking) {  
        return -1;  
    }  
  
    int confirmation = orderConfirmationSequence.next();  
  
    voyage.add(argo(cargo, confirmation);  
  
    return confirmation;  
}

// to-be
public int makeBooking(Cargo cargo, Voyage voyage) {

    if (!overbookingPolicy.isAllowed(cargo, voyage)) return -1;

    int confirmation = order〔 onfirmationSequence.next();

    voyage.add(argo(cargo, co바irmation);

    return confirmation;
}
```

* '초과예약' 에 대한 정책 관리가 `OverBookingPolicy` 에서 관리하도록 하였음.
* 왜?
  * 이 정책 클래스가 중요한 업무임을 나타내기 위해서

> p27 ..팀 내 모든 의사소통과 코드에서 해당 언어를 끊임없이 적용하는 데 전념하라. 다이어그램과 문서에서, 그리고 특히 말할 때 동일한 언어를 사용하다. ... 도메인 전문가는 도메인을 이해하는 데 부자연스럽고 부정확한 용어나 구조에 대해 반대 의사를 표명해야한다.

* 용어를 통일하라
* 다른 용어를 사용하는 데 반대의사를 표명해라
* 왜?
  * 개발, 설계를 어렵게 하는 모호함과 불일치를 제거하기 위해서

> p37 문서는 코드와 말을 보완하는 역할을 해야한다. 문서는 코드가 이미 잘하고 있는 것을 해서는 안된다. 문서는 유효한 상태를 유지하고 최신 내용을 담고 있어야한다.

* 코드가 우선
* 문서는 보완
* 문서가 유효한 상태를 보장하려면, 관리되어야하는데 이 부분은 생각보다 놓치기 쉬운 부분 인듯.
  * 코드 수정 시, 문서도 수정되어야함을 코드 주석으로 남겨놓는 방법

### 참고

* <https://product.kyobobook.co.kr/detail/S000001514402>
