도메인주도 설계9장. 암시적인 개념을 명확하게cafe.naver.com/architect1/전효성
심층 모델문제의 본질을 파악무엇이 문제인가해결책은 어떤것이 있나중요한 개념들해결책에 대한 추상화2
9장의 주요 내용암시적인 개념  명확화우리가 흔히 아는 내용들3
개념 파헤치기어떻게 숨어있는 개념을 캐치할까?팀에서 사용하는 언어찝찝한 설계모순된 요구사항전문가의 의견 검토도메인 관련 문서 조사실험4
개념 파헤치기언어에 귀를 귀울여라어색한 부분을 조사하라모순점에 대해 깊이 고민하라시도하고 또 시도하라5
언어에 귀를 귀울여라모델을 발전시키는 것들도메인 전문가가 언급한 새로운 단어전문가가 교정해 주는 단어, 개념들특정 문구를 언급시 도메인 전문가의 당혹스러운 표정?6
어색한 부분을 조사하라어색한 설계의 정의말로 표현하기 힘들정도로복잡한 작업을 하는 프로시저새로운 요구사항으로 안한복잡도 증가도메인 전문가의 역할누락된 개념, 부자연스러운 흐름 발견아이디어 검증개발자의 역할도메인 전문가가 해당 역할을 잘 수행하도록 돕는 것7
모순점에 대해 깊이 고민하라모순의 발생 원인용어를 다르게 사용도메인 이해 부족실제로 다양한 관점심층 모델을 발전시키는 중요한 단서8
일반적으로….모순은 그렇게 흥미롭지도 않고 심오한 내용도 없더라.모든 모순을 해결하는 것은 비현실적, 바람직하지 않다.그러나, 심사숙고하면서 숨겨져 있던 사실을 밝히는 계기가 된다.9
서적을 참고하라분명해 보이는 사실도 확인하자.다양한 서적 참고10
시도하고 또 시도하라6쓸만한 지식을 발견하기 까지 발생한 커뮤니케이션 오류모든 것을 고민하여 가는 것보다 try and learn하여 가는 것이 빠르다.11
12
다소 불명확한 개념을 모델링 하는 법명시적인 제약조건도메인 객체로서의 프로세스모델에 반영되는 개념들명사, 동사13
명시적인 제약조건제약조건 ( constraint )대부분암시적인 상태로 존재명시적으로 표현하자.‘명사’로 제약에 대한 의견 교환              Before                                                        After14
도메인 객체로서의 프로세스프로세스를 도메인 모델에 표현하는 방법캡슐화기본적인 방법알고리즘 자체 or 부분을 객체화여러가지 프로세스가 존재할 경우각각 객체는 다른 STRATEGY를 표현(12장)15
도메인 객체로서의 프로세스명시적으로 표현해야 할 프로세스도메인 전문가가 이야기 하는 프로세스숨겨야 할 프로세스컴퓨터 프로그램 상의 매커니즘결론 : 제약사항과 프로세스를 모델의 요소로 간주해야 한다.16
이런 것들을 잘하려면?개념의 명확화  SPECIFICATIONSPECIFICATION마틴파울러& Evans 1997 개발자세한 내용은 10장에특정 종류의 규칙을 표현하는 간결한 수단 제공조건로직과 규칙의 분리 유도17
SPECIFICATION (명세)규칙을 처리하는 방법 자주 변경되지 않는 것(도메인 계층)Date자주 변경되는 것(응용계층)계정정보지불이력회사정책18
SPECIFICATION (명세)또 다른 방법, 논리 프로그래밍 rule-base system술어( predicate )  bool구현하기 어렵다.19
SPECIFICATION (명세)이 책에서 제시하는 방법20
SPECIFICATION?객체 안의 “평가 로직들”을 Specification객체로 분리Specification 객체의 특징평가하는 객체Value object다양한평가 객체들을 FACTORY를 통해 생성 가능PATTERN임.21
SPECIFICATION 의 적용과 구현SPECIFICATION PATTERN 사용용도검증( validation )선택( selection )요청 구축( building to order )패턴22
SPECIFICATION의 적용과 구현검증( validation )특정한 조건에 부합하는 판단하기 위한 객체의 개별 테스트다양한 invoice 평가 전략이 존재다양한 Invoice specification 객체를 이용하여 Invoice객체를 검증23
SPECIFICATION의 적용과 구현선택( or 질의 )특정 조건 기반으로 객체 컬렉션 일부를 선택예, “체납된 송장을 보유한 모든 고객 목록 나열”DB를 통한 접근SQL쿼리는 도메인 계층에만 존재REPOSITORY, DOUBLE DISPATCH 패턴 사용24
SPECIFICATION의 적용과 구현선택( or 질의 )25
SPECIFICATION의 적용과 구현요청구축( 생성 )SPECIFICATION 패턴을 이용하여 객체를 생성선언적으로 객체 생성유연성 증가테스트 용이동작하는 프로토타입 작성 용이Mock object26
SPECIFICATION의 적용과 구현요청구축( 생성 )Example – 화학용품 보관화학용품 특징TNT  강화 컨테이너
생물학적 시료  강화 컨테이너에 보관 금지

9장 도메인 주도 설계