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

More Related Content

What's hot

서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 
無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享Win Yu
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Steve Pember
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)hyun soomyung
 
Design Pattern - Chain of Responsibility
Design Pattern - Chain of ResponsibilityDesign Pattern - Chain of Responsibility
Design Pattern - Chain of ResponsibilityMudasir Qazi
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Shohei Okada
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128beom kyun choi
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 
인수테스트 주도 개발
인수테스트 주도 개발인수테스트 주도 개발
인수테스트 주도 개발Jaehoon Oh
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in JavaIonut Bilica
 

What's hot (20)

서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
 
Design Pattern - Chain of Responsibility
Design Pattern - Chain of ResponsibilityDesign Pattern - Chain of Responsibility
Design Pattern - Chain of Responsibility
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
Redis
RedisRedis
Redis
 
인수테스트 주도 개발
인수테스트 주도 개발인수테스트 주도 개발
인수테스트 주도 개발
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in Java
 

Viewers also liked

Grafico diario del s&p 500 para el 30 04 2012
Grafico diario del s&p 500 para el 30 04 2012Grafico diario del s&p 500 para el 30 04 2012
Grafico diario del s&p 500 para el 30 04 2012Experiencia Trading
 
80 Years of History - Pitch
80 Years of History - Pitch80 Years of History - Pitch
80 Years of History - PitchErica Lindberg
 
Press release march gestion family businesses fund w28 march 2012
Press release march gestion family businesses fund w28 march 2012Press release march gestion family businesses fund w28 march 2012
Press release march gestion family businesses fund w28 march 2012evercom
 
Some Essential Skills You Need To Work - MAGNIFICO INC
Some Essential Skills You Need To Work - MAGNIFICO INCSome Essential Skills You Need To Work - MAGNIFICO INC
Some Essential Skills You Need To Work - MAGNIFICO INCMAGNIFICO INC
 
HD-SDI 문자발생기, HD-SDI Charactor Generator
HD-SDI 문자발생기, HD-SDI Charactor GeneratorHD-SDI 문자발생기, HD-SDI Charactor Generator
HD-SDI 문자발생기, HD-SDI Charactor GeneratorDeok kyu Ahn
 
Mark Kilham - Investment presentation for SugarCRM Munich 2016
Mark Kilham - Investment presentation for SugarCRM Munich 2016Mark Kilham - Investment presentation for SugarCRM Munich 2016
Mark Kilham - Investment presentation for SugarCRM Munich 2016Mark John Courtney Kilham
 
Resume_Kamlesh Patel 1.8.16
Resume_Kamlesh Patel 1.8.16Resume_Kamlesh Patel 1.8.16
Resume_Kamlesh Patel 1.8.16kamlesh Patel
 
Phân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt nam
Phân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt namPhân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt nam
Phân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt namhttps://www.facebook.com/garmentspace
 

Viewers also liked (13)

Grafico diario del s&p 500 para el 30 04 2012
Grafico diario del s&p 500 para el 30 04 2012Grafico diario del s&p 500 para el 30 04 2012
Grafico diario del s&p 500 para el 30 04 2012
 
Tapón virtual
Tapón virtualTapón virtual
Tapón virtual
 
80 Years of History - Pitch
80 Years of History - Pitch80 Years of History - Pitch
80 Years of History - Pitch
 
TODO EL MUNDO
TODO EL MUNDOTODO EL MUNDO
TODO EL MUNDO
 
Press release march gestion family businesses fund w28 march 2012
Press release march gestion family businesses fund w28 march 2012Press release march gestion family businesses fund w28 march 2012
Press release march gestion family businesses fund w28 march 2012
 
Curriculum ingles
Curriculum inglesCurriculum ingles
Curriculum ingles
 
Some Essential Skills You Need To Work - MAGNIFICO INC
Some Essential Skills You Need To Work - MAGNIFICO INCSome Essential Skills You Need To Work - MAGNIFICO INC
Some Essential Skills You Need To Work - MAGNIFICO INC
 
Presentación1
Presentación1Presentación1
Presentación1
 
Ontological & axiological density
Ontological & axiological densityOntological & axiological density
Ontological & axiological density
 
HD-SDI 문자발생기, HD-SDI Charactor Generator
HD-SDI 문자발생기, HD-SDI Charactor GeneratorHD-SDI 문자발생기, HD-SDI Charactor Generator
HD-SDI 문자발생기, HD-SDI Charactor Generator
 
Mark Kilham - Investment presentation for SugarCRM Munich 2016
Mark Kilham - Investment presentation for SugarCRM Munich 2016Mark Kilham - Investment presentation for SugarCRM Munich 2016
Mark Kilham - Investment presentation for SugarCRM Munich 2016
 
Resume_Kamlesh Patel 1.8.16
Resume_Kamlesh Patel 1.8.16Resume_Kamlesh Patel 1.8.16
Resume_Kamlesh Patel 1.8.16
 
Phân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt nam
Phân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt namPhân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt nam
Phân tích tình hình tài chính tại công ty cổ phần thương mại kcs việt nam
 

Similar to 9장 도메인 주도 설계

도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계Wonjun Hwang
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringSuwon Chae
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksSunuk Park
 
Specification By Example
Specification By ExampleSpecification By Example
Specification By ExampleJonghwa Lee
 
Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)종일 김
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraftbbongcsu
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)SangIn Choung
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
C Language II
C Language IIC Language II
C Language IISuho Kwon
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Designhyun soomyung
 
스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry RunnerServerDevCamp
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 

Similar to 9장 도메인 주도 설계 (20)

도메인주도설계
도메인주도설계도메인주도설계
도메인주도설계
 
TDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: RefactoringTDD&Refactoring Day 01: Refactoring
TDD&Refactoring Day 01: Refactoring
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
Specification By Example
Specification By ExampleSpecification By Example
Specification By Example
 
Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)Event Storming(이벤트 스토밍)
Event Storming(이벤트 스토밍)
 
Ddd ch12-13
Ddd ch12-13Ddd ch12-13
Ddd ch12-13
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
The Introduction to Refactoring
The Introduction to Refactoring The Introduction to Refactoring
The Introduction to Refactoring
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraft
 
개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)개발이 테스트를 만났을 때(Shift left testing)
개발이 테스트를 만났을 때(Shift left testing)
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
발표원고
발표원고발표원고
발표원고
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
애자일의 모든것
애자일의 모든것애자일의 모든것
애자일의 모든것
 
C Language II
C Language IIC Language II
C Language II
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner스마일게이트 서버개발캠프 - ING - Laundry Runner
스마일게이트 서버개발캠프 - ING - Laundry Runner
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 

More from Hyosung Jeon

windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. JobHyosung Jeon
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)Hyosung Jeon
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동Hyosung Jeon
 

More from Hyosung Jeon (7)

Nodejs express
Nodejs expressNodejs express
Nodejs express
 
windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. Job
 
WebGL
WebGLWebGL
WebGL
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
Map reduce
Map reduceMap reduce
Map reduce
 
목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동
 

9장 도메인 주도 설계

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