규모가 큰 프로젝트에서는 다수의 모델이 사용되기 마련이다.
그러나 개별적인 모델을 기반으로 작성된 코드가 한데 섞이면 많은 버그가 발생하고 신뢰성이 떨어지며 이해하기 힘든 소프트웨어가 만들어진다.
컨텍스트는 코드의 특정 부분일 수도, 개별 팀이 수행하는 업무 일 수도 있다.
브레인스토밍 회의를 거쳐 만들어진 모델의 경우, 회의에서 오간 대화로 컨텍스트를 국한시킬 수 있다.
다수의 모델 탓에 발생하는 문제를 해결하려면 하나의 모델이 적용되고 가능한 한 통일된 상태로 유지할 수 있는 소프트웨어 내의 제한된 부분으로 특정 모델의 범위를 명호가하게 정의할 필요가 있다.
모델이 적용되는 컨텍스트를 명시적으로 정의해야 한다.
컨텍스트의 경계를 팀 조직, 애플리케이션의 특정 부분에서의 사용법, 코드 기반이나 데이터베이스 스키마와 같은 물리적인 형태의 관점에서 명시적으로 설정해야 한다.
경계 내에서는 모델을 엄격하게 일관된 상태로 유지하고 경계 바깥의 이슈 때문에 초점이 흐려지거나 혼란스러워져서는 안 된다.
어떤 두 객체 집합이 각기 다른 모델을 구성한다고 여겨지면 두 객체 집합은 거의 항상 서로 다른 개별 MODULE
내에 위치한다.
그러나 MODULE
은 단일 모델 내에 포함된 요소를 구성하는 데도 사용되며, 꼭 개별 CONTEXT
에 의도를 전하는 것은 아니다.
BOUNDED CONTEXT
내에 MODULE
이 만들어낸 개별 네임스페이스가 포함되면 우발적으로 발생하는 모델의 단편화를 파악하기가 어려워진다.
예약이 완료되면 해당 예약 내역은 레거시 화물추적 시스템으로 전달돼야 한다.
레거시 모델과 구분하기로 사전에 결정했으므로, 레거시 화물추적 시스템은 구획 밖에 존재한다.
새로운 모델과 레거시 사이에 필요한 번역은 레거시 유지보수팀의 몫이다. 번역 메커니즘은 모델에 의해 주도되지 않는다.
하나의 BOUNDED CONTEXT
에서 여러 팀이 동시에 작업하려면, 단일화 모델을 위해서 설계 과정에 같이 참여해야 한다.
여러 팀이 동시에 작업할 때는 비공식적인 정보 공유가 발생하지 않게 하고, 정보를 공유를 위한 프로세스가 정립되어야 한다.
BOUNDED CONTEXT
밖에 CONTEXT
는 모델에서 벗어나는 자유로음을 얻을 수 있다.
모델을 책임지는 팀에서는 영속화를 비롯한 각 객체의 전체 생명주기를 다룬다. 이 팀에서 데이터베이스 스키마를 통제하므로 그 팀에서 신중하게 객체 관계형 매핑을 명확하게 유지해 오고 있다. 다시 말해서, 스키마는 모델에 의해 주도되며, 따라서 구획안에 존재한다.
실제로 같은 개념을 나타내는 두 개의 모델요소가 존재하는 중복된 개념이 발생한다.
두 사람이 서로 같은 것을 이야기하고 있다고 생각하지만 실제로는 그렇지 않은 경우인 허위 동족 언어가 발생한다.
균열이 발생하면, 독립적으로 모델을 개발하거나 프로세스를 정재해서 단편화를 막아야 한다.