[책] 도메인 주도 설계란 무엇인가?

태빵·2022년 2월 6일
0

독서

목록 보기
2/2

책 링크 : 인터파크-도메인주도 설계란 무엇인가?

이 책을 읽고 도메인 주도 설계에 대해서 뭐랄까 딱 집어서 이것이다라고 말하기는 어려운 것 같다. 그만큼 텍스트 기반의 대용이 많고 많은 내용이 추상화되어서 설명하고 있다.

책이 얇아서 간략하게 읽어보기 좋은 듯 하다.

도메인 주도 설계란

도메인이란? 자동화된 비즈니스 프로세스나 현실 세계의 문제. 코드는 도메인을 추상화 한 것이다.

도메인 모델

  • 도메인 지식에서 선택적으로 추상화 하여 조직화 한 것
  • 정보를 조직화, 체계화 하고 작은 부분으로 나누고 논리적 모듈로 그룹화 하여 하나씩 선택해서 다룸
  • 결국 개발을 더 쉽게 하기 위한 것

유비쿼터스 언어

프로젝트 팀 멤버 내에서 의사소통의 공통된 형식

  • 모델이 중추가 되어 서로간 합의하에 만들어 짐

모델 주도 설계

어떤 도메인이든 다양한 모델로 표현될 수 있고, 모델들은 다양한 방식으로 코드로 표현될 수 잇다.
어떤 방식으로 구현할 것인가?

  1. 쉽고 정확하게 코드로 변환할 수 있는 모델을 선택한다.
  2. 분석모델 설계기법 적용
  3. 도메인 모델링과 설계를 밀접하게 관련시키는 것
  • 실제로 개발할 개발자들이 설계단계부터 참여해서 어떠한 의미인지 정확하게 파악
  • 개발자를 피드백 제공자로 동참
  • 모델 주도 설계에서 나타나는 주요 패턴

엔티티(Entity)

  • 식별자를 가지며 영속성이 필요한 객체

값객체 (Value Object)

  • 식별자가 없으며 영속성이 필요없는 객체
  • 수정할 수 없고 필요한 만큼 복제하여 전달하여 사용

서비스 (Service)

  • 특정 엔터티나 값객체에 속할 수 없는 도메인의 개념 표현
  • 주로 여러객체에 걸쳐서 일어나는 행위를 담당
  • 상태정보를 관리하지 않음

집합 (Aggregation)

  • 객체의 소유권과 경계를 정의
  • 데이터를 변경할 때 하나의 단위로 간주되는
    관련된 객체들의 집합
  • 외부에서 접근할 수 있는 단하나의 창구인 root를 가짐

팩토리(Factory)

  • 복잡한 객체 생성의 절차를 캡슐화
  • 단순한 경우라면 생성자를 사용

리파지토리(Repository)

  • 객체의 저장을 담당
  • 이미 존재하는 도메인 객체의 참조를 얻는 로직을 캡슐화

깊은 통찰을 향한 리팩터링

  • 자동화 테스트를 통해 수정 작업이 기존 기능에 영향을 주지 않음을 확신
  • 설계를 단순하고 유연하게 하기 위해서 리팩터링 해라

모델 무결성 보존

  • 의도적으로 여러개의 모델로 분할
  • 한번 분할된 컨텍스트가 정의되면 지속적으로 통합 및 자동화된 테스트
  • 모든 사람이 컨텍스트 맵을 공유하고 이해
    • 명확히 이해되지 않으면 중복코드 등 발생

아래 질문 모두에 Yes 라면 DDD를 적용한 것입니다.

모두가 이해하는 도메인 모델이 존재하는가?

(Yes / No)

모든 이해당사자가 의사소통에 공통적인 언어(정의된 용어, 즉 Ubiquitous Language)를 사용하는가?

(Yes / No)

소프트웨어가 Model Driven Design(모델 수준으로 추상화되어 코드와 연동하는) 방식으로 개발되고 있는가?

(Yes / No)

profile
hello world