SlideShare ist ein Scribd-Unternehmen logo
1 von 49
도메인 주도 설계14장, 모델의 무결성 유지 2011. 9. 24, 최기원
제 4부 전략적 설계 ㄴ ㄴ 개별 객체 -> 컨텍스트 개인 : 개인 -> 팀 : 팀 정치 설계 단위의 변화에 따른 전략들 14장.모델의 무결성 유지     15장. 디스틸레이션     16장. 대규모 구조 17장. 전략의 종합
14장
모델은 컨텍스트에 적용된다. 컨텍스트는 코드의 특정 부분일 수도,  개별 팀이 수행하는 업무일 수도 있다.
프로젝트가 작을때 ㄴ ㄴ 객체 응집도를 높이고 결합도를 낮추자 객체 객체
프로젝트가 커지면 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체
모델에 맞춰 의미 있게 묶자 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체
Bounded Context라 하자 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 Bounded Context 별로  명확한 의미를 부여한다. 이름을 붙인다. Ubiqiutous language로 사용 경계를 명확히 한다. 모델에 일치시킨다. 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체
ㄴ ㄴ 응집도가 높아진다. ... 우연 응집도 -> 기능 응집도 결합도가 낮아진다. ... 내용 결합도 -> 데이터 결합도 개발자는 Context만 신경 쓰면 된다. Context의 통합에는 번역이 필요하다.
화물 예제 – 1/2
화물 예약 컨텍스트 (팀) 화물 추적 컨텍스트 (팀) 화물 운항 컨텍스트 (팀) 팀별로 Bounded Context를 명확히 한다. 인터페이스를 맞춘다. 코드를 공유하지 않는다. Context의 경계는 번역 프로그램을 따로 만든다. ㄴ ㄴ
결합할 때의 문제점 중복된 개념 서로 다른 말을 하고 있지만 같은 의미 허위 동족 언어 서로 같은 말을 하고 있지만 다른 의미 ㄴ ㄴ
개발이 진행됨에 따라 Context의 의미가 모델과 달라진다. Context내에서 중복된 개념이 생긴다. Context 밖의 개념을 고려하기 시작한다. ㄴ ㄴ
지속적인 통합을 한다. 개념의 통합 Ubiquitous Language를 지속적으로 사용한다. “조지 팀에서 만든 것이 변경될 예정이므로 그에 따라 저희 것도 변경할 예정입니다.” “운송망 모델이 바뀌고 있습니다. 그러니 저희도 예약 컨텍스트에 대한 번역기를 변경할 예정입니다.” 구현의 통합 단계적이고 재생 가능한 병합/빌드 TDD ㄴ ㄴ
Context Map 컨텍스트 간의 관계도(지도) Context의 이름을 쓴다. Context간의 관계를 표현한다. 현재 상태 그대로의 상황을 표현한다. 유지한다. 모든 이들이 경계가 어디에 위치하는지 알 수 있도록 공표한다. Map을 보면 바꾸고 싶어진다. 심사숙고 해야 한다. ㄴ ㄴ
화물 예제 – 2/2
예제) 화물... ㅡㅡ; 화물 예약 팀 화물 추적 팀 화물 운항 일정 관리 팀 팀별로 Bounded Context를 명확히 한다. 인터페이스를 맞춘다. 코드를 공유하지 않는다. Context의 경계는 번역 프로그램을 따로 만든다. ㄴ ㄴ
예제, 화물 ㅡㅡ;; ㄴ 화물 항로 명세 ㄴ 일정 예약 Context 구간
ㄴ ㄴ Route Specification -> locationCodes                   Itinerary <- Node ID의 List
Route Specification -> locationCodes
Node ID의 List -> Itinerary 배 항해 ID
컨텍스트 간에는 의사소통이 활발하지 않다. 번역기는 TDD를 해야 한다.
모델을 컨텍스트화 하는 하나의 예시코끼리 통일하기
알겠다. 코끼리는 밧줄같이 생겼어! 맙소사! 코끼리는 벽처럼 생겼네! 알겠다. 코끼리는 뱀같이 생겼어. 정말 이상한 동물일세. 정말 평범해. 코끼리는 꼭 나무 같이 생겼어
상상력과 지속적인(아마도 열띤) 토론을 거친후
코끼리를 한쪽 끝에는 밧줄이 있고 다른 쪽에는 뱀이 있는, 나무기둥이 떠받치고 있는 벽으로 간주하는 것이 적합할지도 모른다.
코끼리는 동물의 특성을 가졌을꺼야
Context(팀)간의 관계 패턴
팀 사이에 모델을 공유 하는 패턴 공유하기로 한 도메인 모델의 부분집합을 명시 협의 없이 변경할 수 없다. 주기적으로 통합한다.
갑/을 관계의 팀  단방향 의존 갑의 요구사항이 가장 중요하다 갑의 코드는 테스트 스위트를 마련 예제) 수송단가 분석 vs 예약
갑/을 관계의 팀에서 ‘을’을 맹목적으로 신뢰
갑/을 관계의 팀에서 ‘을’을 어느 정도만 신뢰 중간 레이어를 거친다. 번역기
갑/을 관계의 팀에서 을을 버린 갑.
컨텍스트 번역기 번역기 번역기 컨텍스트 컨텍스트 컨텍스트
컨텍스트 번역기 컨텍스트 컨텍스트 컨텍스트
번역기 대신  (XML과 같은) 도메인 정보를 표현할 수 있는 공유 언어를  사용 하는 관계
변형 : 리펙토링
병합
병합
폐기 레거시 시스템
공식화
질문?

Ddd 14장

  • 1. 도메인 주도 설계14장, 모델의 무결성 유지 2011. 9. 24, 최기원
  • 2. 제 4부 전략적 설계 ㄴ ㄴ 개별 객체 -> 컨텍스트 개인 : 개인 -> 팀 : 팀 정치 설계 단위의 변화에 따른 전략들 14장.모델의 무결성 유지 15장. 디스틸레이션 16장. 대규모 구조 17장. 전략의 종합
  • 4.
  • 5. 모델은 컨텍스트에 적용된다. 컨텍스트는 코드의 특정 부분일 수도, 개별 팀이 수행하는 업무일 수도 있다.
  • 6. 프로젝트가 작을때 ㄴ ㄴ 객체 응집도를 높이고 결합도를 낮추자 객체 객체
  • 7. 프로젝트가 커지면 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체
  • 8. 모델에 맞춰 의미 있게 묶자 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체
  • 9. Bounded Context라 하자 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 ㄴ 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 Bounded Context 별로 명확한 의미를 부여한다. 이름을 붙인다. Ubiqiutous language로 사용 경계를 명확히 한다. 모델에 일치시킨다. 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체 객체
  • 10. ㄴ ㄴ 응집도가 높아진다. ... 우연 응집도 -> 기능 응집도 결합도가 낮아진다. ... 내용 결합도 -> 데이터 결합도 개발자는 Context만 신경 쓰면 된다. Context의 통합에는 번역이 필요하다.
  • 12. 화물 예약 컨텍스트 (팀) 화물 추적 컨텍스트 (팀) 화물 운항 컨텍스트 (팀) 팀별로 Bounded Context를 명확히 한다. 인터페이스를 맞춘다. 코드를 공유하지 않는다. Context의 경계는 번역 프로그램을 따로 만든다. ㄴ ㄴ
  • 13. 결합할 때의 문제점 중복된 개념 서로 다른 말을 하고 있지만 같은 의미 허위 동족 언어 서로 같은 말을 하고 있지만 다른 의미 ㄴ ㄴ
  • 14.
  • 15. 개발이 진행됨에 따라 Context의 의미가 모델과 달라진다. Context내에서 중복된 개념이 생긴다. Context 밖의 개념을 고려하기 시작한다. ㄴ ㄴ
  • 16. 지속적인 통합을 한다. 개념의 통합 Ubiquitous Language를 지속적으로 사용한다. “조지 팀에서 만든 것이 변경될 예정이므로 그에 따라 저희 것도 변경할 예정입니다.” “운송망 모델이 바뀌고 있습니다. 그러니 저희도 예약 컨텍스트에 대한 번역기를 변경할 예정입니다.” 구현의 통합 단계적이고 재생 가능한 병합/빌드 TDD ㄴ ㄴ
  • 17.
  • 18. Context Map 컨텍스트 간의 관계도(지도) Context의 이름을 쓴다. Context간의 관계를 표현한다. 현재 상태 그대로의 상황을 표현한다. 유지한다. 모든 이들이 경계가 어디에 위치하는지 알 수 있도록 공표한다. Map을 보면 바꾸고 싶어진다. 심사숙고 해야 한다. ㄴ ㄴ
  • 20. 예제) 화물... ㅡㅡ; 화물 예약 팀 화물 추적 팀 화물 운항 일정 관리 팀 팀별로 Bounded Context를 명확히 한다. 인터페이스를 맞춘다. 코드를 공유하지 않는다. Context의 경계는 번역 프로그램을 따로 만든다. ㄴ ㄴ
  • 21. 예제, 화물 ㅡㅡ;; ㄴ 화물 항로 명세 ㄴ 일정 예약 Context 구간
  • 22. ㄴ ㄴ Route Specification -> locationCodes Itinerary <- Node ID의 List
  • 23. Route Specification -> locationCodes
  • 24. Node ID의 List -> Itinerary 배 항해 ID
  • 25.
  • 26.
  • 27. 컨텍스트 간에는 의사소통이 활발하지 않다. 번역기는 TDD를 해야 한다.
  • 28. 모델을 컨텍스트화 하는 하나의 예시코끼리 통일하기
  • 29. 알겠다. 코끼리는 밧줄같이 생겼어! 맙소사! 코끼리는 벽처럼 생겼네! 알겠다. 코끼리는 뱀같이 생겼어. 정말 이상한 동물일세. 정말 평범해. 코끼리는 꼭 나무 같이 생겼어
  • 30.
  • 32. 코끼리를 한쪽 끝에는 밧줄이 있고 다른 쪽에는 뱀이 있는, 나무기둥이 떠받치고 있는 벽으로 간주하는 것이 적합할지도 모른다.
  • 35. 팀 사이에 모델을 공유 하는 패턴 공유하기로 한 도메인 모델의 부분집합을 명시 협의 없이 변경할 수 없다. 주기적으로 통합한다.
  • 36. 갑/을 관계의 팀 단방향 의존 갑의 요구사항이 가장 중요하다 갑의 코드는 테스트 스위트를 마련 예제) 수송단가 분석 vs 예약
  • 37. 갑/을 관계의 팀에서 ‘을’을 맹목적으로 신뢰
  • 38. 갑/을 관계의 팀에서 ‘을’을 어느 정도만 신뢰 중간 레이어를 거친다. 번역기
  • 39.
  • 40. 갑/을 관계의 팀에서 을을 버린 갑.
  • 41. 컨텍스트 번역기 번역기 번역기 컨텍스트 컨텍스트 컨텍스트
  • 42. 컨텍스트 번역기 컨텍스트 컨텍스트 컨텍스트
  • 43. 번역기 대신 (XML과 같은) 도메인 정보를 표현할 수 있는 공유 언어를 사용 하는 관계