오랜만에 운동을 30분 풀로 했다. 굉장히 상쾌하다. 하지만 눈에 건조함과 피곤함이 남아 있는 것으로 보아 점심때부터는 휴식을 취해야 할 것 같다.
도메인에서 발생하는 문제를 해결하는 소프트웨어의 각 요소는 그것의 중요성에 어루리지 않게 대개 전체 소프트웨어 시스템의 극히 작은 부분을 구성한다.
소프트웨어의 본질적인 목적은 관심있는 도메인 상에서의 문제점을 해결하는 것이다. 하지만, 실제 소프트웨어 구현을 살펴보면, 그것에 대한 관심사는 작아지고, 데이터를 어떻게 저장하는지 혹은 사용자에게 어떻게 보여줄지에 대한 관심사가 상대적으로 지나치게 비대해지는 것을 볼 수 있다.
책에서는 이처럼 도메인 모델이 오염되는 경로들을 언급하고 있다.
아쉽게도 여러분의 우아한 도메인 모델은 그것을 더럽힐 수 있는, 다름아닌 인프라스트럭처나 사용자 인터페이스의 영향을 받는다. 여러분은 모델에 완전히 통합되지 않는 기타 도메인 구성요소를 다뤄야 한다. 또한 같은 도메인에 대해 서로 다른 모델을 사용하는 다른 개발팀에 대처해야 할 것이다. 갖가지 이유로 여러분의 모델은 불분명해지고 모델의 효용성을 잃어버리게 될 수 있다.
위와같은 이유 때문에 도메인 모델은 다른 요소들과 격리되어서 관리되어야 하며, 이를 실현하기 위한 것이 레이어드 아키텍처이다.
현실세계에는 수많은 다대다 연관관계가 있으며, 그중 상당수는 애초부터 양방향으로 나타난다.
모델링은 현실의 문제를 해결하기 위해서 현실을 반영해야만 한다. 하지만 그것이 현실과 모델링이 일치해야 함을 뜻하는 것은 아니다.
모델링의 목적은 당면한 문제를 해결하기 위해서 현실을 단순화하여 파악하는 것이다. 따라서 연관관계에 제약을 가할 수 있으며, 이러한 제약들은 해결하고자 하는 문제와 관련있는 부분은 더욱 드러내고, 그렇지 않은 부분은 감추면서 현상에 대한 통찰력을 가져다 준다.
책에서는 연관관계 제약으로 다음을 말하고 있다.
- 탐색 방향을 부여한다
- 한정자를 추가해서 사실상 다중성을 줄인다.
- 중요하지 않은 연관관계를 제거한다.