지식 탐구

도메인 지식 압축: 도메인 주도 설계의 첫걸음

1장은 PCB 설계에서 낯선 도메인을 마주친 예시로 시작됩니다. 가장 처음 발견한 도메인 요소는 "Net"이라는 것이었고, 이에 대한 세부사항이었습니다.

단순한 다이어그램으로 시작하여 도메인 전문가와의 대화를 통해 점점 구체화되는 상호작용 다이어그램을 완성하고, 이를 통해 가장 초기 모델의 클래스 다이어그램을 추출합니다. 도메인 모델을 추출한 후 이를 바탕으로 프로토타입을 생성하여 프로젝트를 진행한 예시입니다.

효과적인 모델링 요소

풍부한 도메인 모델을 추출하고 정제하는 일련의 순서입니다:

  1. 모델과 구현의 연계: 모델을 가능한 빨리 코드에 반영하여 모델과 구현이 일치하도록 합니다.

  2. 모델 기반으로 언어 정제: 도메인 모델을 기반으로 팀 내에서 사용하는 언어를 정제합니다.

  3. 풍부한 지식이 담긴 모델 개발: 도메인 지식을 코드에 반영하여 풍부한 도메인 모델을 개발합니다.

  4. 모델의 정제: 중요하지 않은 개념은 버리고 핵심 개념을 명확히 하여 모델을 정제합니다.

  5. 브레인스토밍과 실험: 도메인 전문가와 개발자 간의 협업을 통해 다양한 아이디어를 실험하고 개선합니다.

지식 탐구

효율적인 도메인 모델링을 수행하는 사람은 많은 정보 속에서 관련성을 찾아내어 여러 시행착오를 거칩니다. 개발자와 도메인 전문가로 구성된 팀은 대부분 개발자가 이끄는 가운데 협업하는 경향을 가집니다. 지식의 원천은 개발자의 경험과 도메인 전문가의 지식에서 나오며, 이러한 지식은 문서, 대화, 회의 등의 다양한 소통 방법을 통해 공유됩니다.

지속적인 학습

소프트웨어를 작성하는 초기에는 충분히 알지 못한 상태에서 시작하게 됩니다. 프로젝트에서 다루는 지식은 단면적이며 흩어져 있고, 필요한 정보를 추출하기 까다롭습니다. 첫 예시와 같이 어플리케이션과 관련된 주요 개념을 이해하고, 어플리케이션이 원하는 방향으로 동작하는지 점검하는 것이 중요합니다.

풍부한 지식이 담긴 설계

도메인 모델을 추출하는 가장 빠르고 단순한 방법은 명사 찾기입니다. 도메인과 관련된 엔티티 및 액션과 규칙도 매우 중요한데, 이런 개념은 아주 다양한 종류가 있습니다. 도메인 지식을 활용하여 업무 규칙 간 모순되는 부분을 조정하고, 규칙의 빈틈이 생기지 않도록 구체화하고 명확하게 해야 합니다.

심층 모델

유용한 모델은 겉으로 드러나 있는 경우가 없습니다. 도메인과 어플리케이션의 요구사항을 이해하게 되면서, 처음에 생각했던 요소를 버리거나 관점을 바꾸게 됩니다.


예제 코드

public int makeBooking(Cargo cargo, Voyage voyage) {
    int confirmation = orderConfirmationSequence.next();
    voyage.addCargo(cargo, confirmation);
    return confirmation;
}

위 예제 코드는 화물을 특정 항해에 예약하는 간단한 코드입니다. 중요한 비즈니스 규칙(예: 초과 예약 정책)을 코드에 명확하게 반영하여 도메인 전문가와 개발자가 쉽게 이해하고 협력할 수 있도록 해야 합니다.

Last updated