8장-9장

198p

유용한 모델을 개발하기 위해 명심해야 할 세 가지

  1. 정교한 도메인 모델은 만들 수 있으며, 노력을 들일 만한 가치가 있다.

  2. 해당 도메인을 학습하는 개발자와 도메인 전문가의 긴밀한 참여와 반복적인 리팩터링 과정 없이 유용한 모델을 개발하기란 쉽지 않다.

  3. 유용한 모델을 효과적으로 구현하고 사용하려면 정교한 설계 기술이 필요할지도 모른다.

213p

심층 모델로 도약할 수 있는 기회가 찾아올 때 우리는 종종 두려움을 느낀다. 달라지기를 염원하는 만큼 진행 과정이 순탄한 것은 아니다. 진정으로 심층적인 모델로 나아가려면 근본적인 사고방식의 전환이 필요하며 설계의 대부분을 수정해야 한다. 많은 프로젝트에서는 모델과 설계에서 나타나는 가장 중요한 발전은 이러한 도약을 거쳐 이뤄진다.

235p

다음은 객체의 설계가 어딘가 잘못돼 있음을 나타내는 조짐을 일부 나열한 것이다.

  1. 제약조건을 평가하려면 해당 객체의 정의에 적합하지 않은 데이터가 필요하다.

  2. 관련된 규칙이 여러 객체에 걸쳐 나타나며, 동일한 계층구조에 속하지 않는 객체 간에 중복 또는 상속 관계를 강요한다.

  3. 설계와 요구사항에 관한 다양한 논의는 제약조건에 초점을 맞춰 이뤄지지만 정작 구현단계에서는 절차적인 코드에 묻혀 명시적으로 표현되지 않는다.

240p

특별한 목적을 위해 술어와 유사한 명시적인 VALUE OBJECT를 만들어라. SPECIFICATION은 어떤 객체가 특정 기준을 만족하는지 판단하는 술어이다. SPECIFICATION을 이용하면 규칙을 도메인 계층에 유지할 수 있다. 아울러 완전한 객체를 사용해서 규칙을 표현하므로 설계가 모델을 더욱 명확하게 반영할 수 있다.

249p

서술적인 SPECIFICATION을 사용해서 생성기의 인터페이스를 정의하면 생성할 결과물을 명시적으로 인터페이스에 포함시킬 수 있다.

  1. 생성기의 구현을 인터페이스로부터 분리할 수 있다.

  2. SPECIFICATION을 사용한 인터페이스는 생성 규칙을 명시적으로 전해주므로 개발자들이 연산의 세부적인 사항을 이해하지 않고도 생성기의 결과물을 예상할 수 있다.

  3. 생성기는 단순히 SPECIFICATION에 포함된 조건에 따라 객체를 생성하는 반면 생성 요청을 표현하는 코드는 클라이언트에 존재하므로 더 유연한 인터페이스를 얻거나 더 유연하게 개선할 수 있다.

  4. 매우 중요한 이점은, 생성기에 대한 입력을 정의하는 명시적인 방법이 모델에 포함돼 있어서 테스트하기가 더 수월하다는 것이다.

Last updated