IDDD 9장. 모듈

  • Java: 패키지
  • C#: 네임스페이스
  • Ruby: 모듈

모듈로 설계하기

  • 모듈 : 도메인 객체의 컨테이너

규칙

  • 모델링의 개념에 맞춰 모듈을 설계하자
  • 유비쿼터스 언어에 맞춰 모듈을 명명하자
  • 모델에서 사용하는 일반적인 컴포넌트 타입이나 패턴에 따라서 기계적으로 모듈을 생성하지 말자
  • 느슨하게 결합된 모듈을 설계하자.
  • 결합이 필요하다면 짝이 되는 모듈 사이에서 비순환적 의존성이 형성되도록 노력하자
  • 자식 모듈과 부모 모듈 사이에 규칙은 느슨하게 하자
  • 모듈을 모델의 정적인 개념에 따라 만들지 말고, 모듈이 담고 있는 객체에 맞추도록 하자

주방의 서랍에 식기류가 포크와 나이프와 스푼별로 잘 정리돼 있음

기본 모듈 명명 규칙

Java: com.saasovation C#: SaaSOvation

모델을 위한 모듈 명명 규칙

바운디드 컨텍스트

  • com.saasovation.identityaccess
  • com.saasovation.collovoration
  • com.saasovation.agilepm

모듈 구성 예시

  • com.saasovation.identityaccess
    • domain.model

결론은 여러분 팀의 몫이다.

애자일 프로젝트 관리 컨텍스트의 모듈

  • com.saasovation.agilepm
    • domain
      • model
        • product
          • backlogitem
          • release
          • sprint
        • tenant
        • team

이 팀은 모듈 사이의 결합도 문제보다 정리에 중점을 뒀다.

다른 계층 속의 모듈

계층 모듈 비고
사용자 인터페이스 com.saasovation.agilepm.resources ui
애플리케이션 com.saasovation.agilepm.application  
도메인 com.saasovation.agilepm.domain  
인프라 com.saasovation.agilepm.infrastructure adapter

바운디드 컨텍스트보다 모듈

모듈은 응집력이 낮은 경우 분리하기 위한 컨테이너이고, 바운디드 컨텍스트는 그저 경계일 뿐이다.

어짜피 모듈은 상향식(bottom-up)으로 설계하게된다. 모듈 내의 컴포넌트들에 따라서 나눠질 수도 합쳐질 수도 있다. 중요한 것은 도메인 로직과 유비쿼터스 언어에 따르는 것이다.

마무리

  • 유비쿼터스 언어를 표현한다.
  • 모듈 설계의 예시!!
  • 기계적인 모듈 설계는 창의성을 방해한다.
  • 바운디드 컨텍스트 분리보다 모듈 사용이 먼저다.

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