책 링크 : 인터파크-도메인주도 설계란 무엇인가?
이 책을 읽고 도메인 주도 설계에 대해서 뭐랄까 딱 집어서 이것이다라고 말하기는 어려운 것 같다. 그만큼 텍스트 기반의 대용이 많고 많은 내용이 추상화되어서 설명하고 있다.
책이 얇아서 간략하게 읽어보기 좋은 듯 하다.
도메인 주도 설계란
도메인이란? 자동화된 비즈니스 프로세스나 현실 세계의 문제. 코드는 도메인을 추상화 한 것이다.
도메인 모델
- 도메인 지식에서 선택적으로 추상화 하여 조직화 한 것
- 정보를 조직화, 체계화 하고 작은 부분으로 나누고 논리적 모듈로 그룹화 하여 하나씩 선택해서 다룸
- 결국 개발을 더 쉽게 하기 위한 것
유비쿼터스 언어
프로젝트 팀 멤버 내에서 의사소통의 공통된 형식
- 모델이 중추가 되어 서로간 합의하에 만들어 짐
모델 주도 설계
어떤 도메인이든 다양한 모델로 표현될 수 있고, 모델들은 다양한 방식으로 코드로 표현될 수 잇다.
어떤 방식으로 구현할 것인가?
- 쉽고 정확하게 코드로 변환할 수 있는 모델을 선택한다.
- 분석모델 설계기법 적용
- 도메인 모델링과 설계를 밀접하게 관련시키는 것
- 실제로 개발할 개발자들이 설계단계부터 참여해서 어떠한 의미인지 정확하게 파악
- 개발자를 피드백 제공자로 동참
- 모델 주도 설계에서 나타나는 주요 패턴
엔티티(Entity)
값객체 (Value Object)
- 식별자가 없으며 영속성이 필요없는 객체
- 수정할 수 없고 필요한 만큼 복제하여 전달하여 사용
서비스 (Service)
- 특정 엔터티나 값객체에 속할 수 없는 도메인의 개념 표현
- 주로 여러객체에 걸쳐서 일어나는 행위를 담당
- 상태정보를 관리하지 않음
집합 (Aggregation)
- 객체의 소유권과 경계를 정의
- 데이터를 변경할 때 하나의 단위로 간주되는
관련된 객체들의 집합
- 외부에서 접근할 수 있는 단하나의 창구인 root를 가짐
팩토리(Factory)
- 복잡한 객체 생성의 절차를 캡슐화
- 단순한 경우라면 생성자를 사용
리파지토리(Repository)
- 객체의 저장을 담당
- 이미 존재하는 도메인 객체의 참조를 얻는 로직을 캡슐화
깊은 통찰을 향한 리팩터링
- 자동화 테스트를 통해 수정 작업이 기존 기능에 영향을 주지 않음을 확신
- 설계를 단순하고 유연하게 하기 위해서 리팩터링 해라
모델 무결성 보존
- 의도적으로 여러개의 모델로 분할
- 한번 분할된 컨텍스트가 정의되면 지속적으로 통합 및 자동화된 테스트
- 모든 사람이 컨텍스트 맵을 공유하고 이해
아래 질문 모두에 Yes 라면 DDD를 적용한 것입니다.
모두가 이해하는 도메인 모델이 존재하는가?
(Yes / No)
모든 이해당사자가 의사소통에 공통적인 언어(정의된 용어, 즉 Ubiquitous Language)를 사용하는가?
(Yes / No)
소프트웨어가 Model Driven Design(모델 수준으로 추상화되어 코드와 연동하는) 방식으로 개발되고 있는가?
(Yes / No)
https://steemit.com/kr/@frontalnh/domain-driven-design
https://happycloud-lee.tistory.com/94