DDD 01장 - 지식탐구

본 포스트는 도메인 주도 설계 라는 책을 참조하였습니다. 가능하면 본 책을 직접 보시고 DDD를 이해하는 것을 추천드립니다. http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=12174216

효과적인 모델링의 요소

  1. 모델과 구현의 연계.
  2. 모델을 기반으로 하는 언어 정제.
  3. 풍부한 지식이 담긴 모델 개발.
  4. 모델의 정제.
  5. 브레인스토밍과 싪험.

위와 같은 지식탐구는 팀 내 지식을 가치있는 모델로 만든다

지식 탐구

  • 지식 탐구 팀 = 개발자(주도) + 도메인전문가
  • 원재료
  • 도메인 전문가의 지식
  • 기존 시스템 사용자
  • 동일 도메인에 관련된 레거시 시스템의 기술팀
  • 이전의 비슷한 프로젝트에서 얻은 경험

개념적 엄밀함(conceptual rigor)

지속적인 학습

소프트웨어를 작성하기 시작할 때 우리는 충분히 알지 못한 상태에서 시작한다.

  • 생산성이 뛰어난 팀은 지속적인 학습 을 바탕으로 의식적으로 지식을 함양한다.
  • 팀 구성원이나 개발자, 도메인 전문가에게서 모두 똑같이 지식을 얻고 의사소통 체계를 공유하며, 구현을 거쳐 피드백 고리를 완성하는 일을 모두 효과적으로 수행하는 지식탐구 프로세스를 궤도에 올리는 것
  • 발견을 위한 항해는 어디선가 시작돼야 한다.

풍부한 지식이 담긴 설계

  • 엔티티와 값 + 업무활동과 규칙
  • 규칙을 명확하게, 구체화, 필요없는 것은 배제

감춰진 개념 추출하기

  • 선박화물 운송 예약을 위한 어플리케이션 도메인 모델

그림 1-8

public int makeBooking(Cargo cargo, Voyage voyage) {
  int confirmation = orderConfirmationSequence.next();
  voyage.addCargo(cargo, confirmation);
  return confirmation;
}
  • 요구사항 추가 10% 초과예약 허용

그림 1-9

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.addCargo(cargo, confirmation);
  return confirmation;
}
  • 10% 초과 예약 은 정책이고 이는 전략패턴으로 구조화 할 수 있다.

그림 1-10

public int makeBooking(Cargo cargo, Voyage voyage) {
  if (!overbookingPolicy.isAllowed(cargo, voyage)) return -1;
  int confirmation = orderConfirmationSequence.next();
  voyage.addCargo(cargo, confirmation);
  return confirmation;
}
public class overbookingPolicy {
    public boolean isAllowed(Cargo cargo, Voyage voyage) {
      return (cargo.size() + voyage.bookedCargoSize()) <= (voyage.capacity() * 1.1);
    }
}

도메인의 모든 세부사항에 이러한 정교한 설계를 적용하라고 권하는 것이 아니다.

  • 중요한 것에 집중 하고 나머지는 축소하거나 분리
  • 지식을 보전하고 공유
  • 명시적인 설계
  • 그리고 도메인 전문가와 프로그래머 사이에 피드백 고리 를 완성하는 것

심층 모델

더 깊은 지식탐구를 통한 도메인 모델링

MJ

MJ
Backend 개발자 사람입니다. 어플리케이션의 복잡성을 다루는 DDD에 관심이 많습니다. 어제보다 더 나은 개발자가 되려고 항상 노력합니다.

spring boot 2.4.x 에서 openfeign + hystrix 통합하기

spring-boot 2.4.x spring-cloud 2020.x 의존성 상황에서 feign.hystrix.enabled=true가 안됨`feign.circuitbreaker.enabled=true` 로 바꿔보지만 openfeign과 hystr...… Continue reading

IDDD 14장. 애플리케이션

Published on June 19, 2018