juniors-dev-study / domain-driven-design

1 stars 0 forks source link

9장 암시적인 개념을 명확하게 #10

Closed youngvly closed 3 years ago

youngvly commented 3 years ago

09. 암시적인 개념을 정확하게

개념 파헤치기

  1. 도메인 전문가가 사용하는 언어에 귀 기울여라
  2. 설계에서 가장 어색한 부분을 조사하라.
    • 새로운 요구사항으로 복잡성이 증가되는 부분
  3. 모순점에 대해 깊이 고민하라
    • 도메인을 잘못이해하거나, 용어를 다르게 쓰는 부분.
  4. 서적 참고
    • 도메인에 관련된 전문서적
    • 해당 도메인을 경험한 다른 sw전문가의 서적
  5. 시도하고 또시도하라..

다소 불명확한 개념을 모델링 하는 법

  1. 명시적인 제약조건
    • 제약조건을 자체적인 메서드로 분리하면 제약조건이름이 생겼기 때문에 명확하게 표현가능.
    • 어떤 제약조건을 포함한 객체의 설계가 잘못되어있음을 나타내는 조짐
      1. 제약조건을 평가하려면 객체의 정의에 적합하지않은 데이터가 필요하다.
      2. 관련된 규칙이 여러 객체에 걸쳐 나타나고, 다른 계층구조의 객체간의 중복또는 상속관계를 강요한다.
      3. 논의는 제약조건에 초점이 맞춰지지만, 구현은 절차적인 코드에 묻혀 명시적으로 표현되지 않는다.
  2. 도메인 객체로서의 프로세스
    • 객체는 절차를 캡슐화해서 절차대신 객체의 목표나 의도에 관해 생각하게 해야한다.
    • 프로세스를 수행하는 방법이 한가지 이상일때, 알고리즘 자체 또는 일부를 객체로만드는 방법이 있다.

Specification

: 규칙을 표현하는 수단, 조건로직으로부터 규칙을 분리해서 규칙이 모델 내에서 만들어지게끔 만든다.

y2o2u2n commented 3 years ago

다소 불명확한 개념을 모델링하는 법

SPECIFICATION

chanhyeong commented 3 years ago

implicit -> explicit

🤔 숨은 스펙 찾기?

개념 파헤치기

암시적인 개념을 드러내는 단서에 초점

언어를 잘 들어라

어색한 부분을 조사

모순에 대한 고민

도메인 관련 서적 읽기

계속 시도

불명확한 개념 모델링

Explicit Constraints

제약 조건을 별도의 메소드로 분리

Processes as Domain Objects (도메인 객체로써의 프로세스)

SPECIFICATION

image

기존 logic-programming 에서 사용하던 predicate 를 갖는 특별한 객체 생성
-> 테스트 메소드가 독립적인 객체로 발전

적용과 구현

  1. Validation: 특정 조건에 부합하는지 판단하기 위해 개별 객체를 테스트
  2. Selection: 특정한 조건을 기반으로 객체 컬렉션 일부 선택
    1. RDB 쿼리문 생성 (asSQL())
      • 테이블 구조가 domain layer 에 노출되는 문제
    2. Repository 에 특정 쿼리를 갖는 메소드를 이름으로 명시. Specification 에서 Repository 를 받아서 실행
      • 규칙을 Specification 에 모으지는 못했지만, 본질적인 규칙은 모아져 있음
    3. 일단 조건에 맞는걸 다 들고와서 Specification 메소드 수행
      • 메모리 성능 저하
  3. Building to order (Generating) (요청구축) ❓ : 아직 존재하지 않는 객체에 대한 기준 명시. 조건을 만족하는 객체 or 객체 집합 생성하거나 재구성
    • Generator ❓ 구현을 인터페이스로부터 분리
      • 생성할 결과물에 대한 요구사항 선언. 결과물을 생성하는 방법은 정의하지 않음
    • 생성 규칙을 명시적으로 전달 -> 세부 이해 없이 결과물 예상 가능
    • Specification 에 포함된 조건에 따라 객체 생성하여 더 유연한 인터페이스 및 개선 가능
    • Generator 에 대한 입력을 정의하는 방법이 모델에 포함되어 있어 테스트가 수월

WarehousePacker 에시는 Specification 이 맞는지? Generator 는 또 뭐지?

bearics commented 3 years ago

❓p223, 5. 예약 보고서로부터 도메인 로직을 제거하고 별도의 도메인 계층으로 옮김.

❓ specification의 위치는? domain, infra 어디..?