복잡하게 동작하는 소프트웨어에 좋은 설계까 결여돼 있다면 요소들을 리팩터링하거나 결합하기가 어려워짐.

개발자들이 소프트웨어의 처리 방식에 내포된 모든 의미를 확신하지 못하면 곧바로 중복이 나타나기 시작함.

따라서 개발이 진행될수록 현재 레거시 코드로 인한 중압감에 시달리지 않고 프로젝트 진행을 촉진하려면 변경을 수용하고 즐겁게 작업할 수 있는 설계가 필요함

→ 유연한 설계

유연한 설계는 심층 모델링을 보완함

너무 과도한 추상 계층과 간접 계층이 존재하면 오히려 유연성에 방해가 됨.

정교한 시스템을 만들 목적으로 조립 가능하고 그럼에도 이해하기가 어렵지 않은 요소를 만들렴녀 MDD를 적당한 수준의 엄밀한 설계 형식과 접목하고자 노력해야 함.

개발자의 역할 두 가지

  1. 클라이언트 개발자 역할로서 설계 특징을 활용해 도메인 객체를 애플리케이션 코드나 다른 도메인 계층의 코드와 통합함.
  2. 설계는 설계 자체를 변경하는 개발자도 뒷받침해야 한다는 것

→ 변경에 열려 있으려면 설계가 클라이언트 개발자가 사용하는 모델과 동일한 저변의 모델을 드러내어 쉽게 이해할 수 있어야 함

→ 설계는 도메인을 표현하는 심층 모델의 윤곽을 따르기에 유연한 지점에서 설계를 알맞게 수정해서 대부분의 변경을 처리할 수 있음

image.png