Today I Learned

[도메인 주도 설계] 09. 암시적인 개념을 명확하게 (2) 본문

도메인 주도 설계

[도메인 주도 설계] 09. 암시적인 개념을 명확하게 (2)

하이라이터 2022. 1. 26. 20:27
728x90

SPECIFICATION(명세)

  • 다른 객체에 대한 제약조건을 기술
  • 다른 객체가 SPECIFICATION에 명시된 기준을 만족하는지 검사
  • 객체를 평가할 수 있는 술어를 VALUE OBJECT 형식으로 구성
  • 규칙이 복잡할 때는 논리 연산자를 사용해서 술어를 결합

SPECIFICATION의 적용과 구현

 

  • SPECIFICATION 패턴을 적용하면 다른 방법을 사용해서 구현해야 하는 상황에서도 일관된 모델을 사용할 수 있다.
  • SPECIFICATION의 세가지 용도
    1. 검증 : 객체가 어떤 요건을 충족시키거나 특정목적으로 사용할 수 있는지 가늠
    2. 선택 : 컬렉션 내의 객체를 선택(ex. 기한이 만료된 송장 목록을 조회)
    3. 구축 : 특정한 요구사항을 만족하는 새로운 객체의 생성을 명시
  • 검증
    • SPECIFICATION의 가장 단순한 용도이며, SPECIFICATION의 개념을 가장 직관적으로 설명해주는 방식
  • 선택(또는 질의)
    • 조건에 부합하는지 판단하기 위해 개별 객체를 테스트하며, 테스트 결과를 기반으로 특정한 행위를 수행하기 위해 사용
    • RDB를 사용한다면 SPECIFICATION은 도메인 객체에 대한 질의 접근을 제공하거나, 어떤 질의문을 사용하는지 제어(SQL문은 REPOSITORY에  위치)하는 식으로 사용할 수 있음
  • 요청 구축(생성)
    • SPECIFICATION에 명시된 조건을 만족하는 새로운 객체나 객체집합을 생성 또는 재구성하는 것이 목적
      • ex) 마하 2의 속도, 1800 마일 이상의 비행거리, 5천만 달러 이하 예산으로 개발 가능한 전투기
    • SPECIFICATION을 사용해서 생성기(generator)의 인터페이스를 정의할 때의 장점
      • 생성기의 구현을 인터페이스로부터 분리 가능
      • 인터페이스가 생성 규칙을 명시적으로 나타내므로 연산의 세부사항을 이해하지 않고도 결과물을 예상 가능
      • 생성 요청을 표현하는 코드가 클라이언트에 존재하여 더 유연하고 개선 가능한 인터페이스를 얻음
      • 생성기에 대한 입력을 정의하는 명시적인 방법이 모델에 포함되어있어 테스트하기 수월해짐
728x90
Comments