Today I Learned

[도메인 주도 설계] 06. 도메인 객체의 생명주기 (1) 본문

도메인 주도 설계

[도메인 주도 설계] 06. 도메인 객체의 생명주기 (1)

하이라이터 2021. 12. 10. 03:29
728x90
  • 모든 객체에는 생명주기가 있다.
  • MODEL-DRIVEN DESIGN에서는 이러한 객체들을 관리하는것이 중요하다.

  • 도메인 객체의 관리와 관련된 문제는 두 가지 범주로 나뉜다.
    1. 생명주기 동안의 무결성 유지하기
    2. 생명주기 관리의 복잡성으로 모델이 난해해지는 것을 방지하기
  • AGGREGATE, FACTORY, REPOSITORY 세 가지 패턴을 사용해서 문제를 해결한다.

AGGREGATE (집합체)

  • 데이터 변경의 단위로 다루는 연관 객체의 묶음
  • 경계 : AGGREATE에 무엇이 포함되고 포함되지 않는지를 정의
  • 루트 : 하나만 존재하며, AGGREGATE에 포함된 특정 ENTITY를 가리킴
  • 경계 안의 객체는 서로 참조할 수 있지만, 경계 바깥의 객체는 루트만 참조할 수 있다.

  • AGGREGATE 적용 규칙
    • 루트 ENTITY는 전역 식별성을 지니며 궁극적으로 불변식을 검사할 책임이 있다.
    • 각 루트 ENTITY는 전역 식별성을 지닌다. 경계 안의 ENTITY는 지역 식별성을 지니며, 이러한 지역 식별성은 해당 AGGREGATE 안에서만 유일하다.
    • AGGREGATE 의 경계 밖에서는 루트 ENTITY를 제외한 AGGREGATE 내부의 구성요소를 참조할 수 없다.
    • AGGREGATE 안의 객체는 다른 AGGREGATE의 루트만 참조할 수 있다.
    • 삭제 연산은 AGGREGATE의 객체 안에 모든 요소를 한 번에 제거해야 한다.
    • AGGREGATE 경계 안의 어떤 객체를 변경하더라도 전체 AGGREGATE의 불변식은 모두 지켜져야 한다.
  • 불변식 : 데이터가 변경될 때마다 유지돼야하는 일관성 규칙

FACTORY (팩터리)

  • 객체를 생성하는 책임을 맡고있는 프로그램 요소
  • 복합한 객체나 AGGREGATE를 생성하는데 필요한 지식을 캡슐화
  • 클라이언트의 목적과 생성된 객체의 추상적인 관점을 반영하는 인터페이스를 제공
  • FACTORY 설계를 위한 기본 요건
    1. 각 생성 방법은 원자적이어야 하며, 생성된 객체나 AGGREGATE의 불변식을 모두 지켜야한다.
    2. 생성된 클래스보다는 생성하고자하는 타입으로 추상화되어야 한다.
  • 다형성을 활용하지 않는 간단한 객체까지 FACTORY를 사용하면 이해하기 어려워질 수 있다.
  • 공개 생성자만으로 충분한 경우
    • 클래스가 타입인 경우, 클래스가 어떤 계층구조의 일부를 구성하지 않으며, 인터페이스를 구현하는 식으로 다형적으로 사용되지 않는 경우
    •  클라이언트가 STRATEGY를 선택하는 한 방법으로서 구현체에 관심이 있는 경우
    • 클라이언트가 객체의 속성을 모두 이용할 수 있어서 클라이언트에게 노출된 생성자 내에서 객체 생성이 중첩되지 않는 경우
    • 생성자가 복잡하지 않은 경우
    • 공개 생성자가 FACTORY와 동일한 규칙을 반드시 준수해야하는 경우(모든 불변식을 충족하는 원자적인 연산)
  • 인터페이스 설계시 주의사항
    • 각 연산은 원자적이어야 한다. 생성물을 만들어내는 데 필요한 것들을 모두 한번에 FACTORY로 전달해야 한다.
    • FACTORY는 자신에게 전달된 인자와 결합될 것이다. 인자를 어떻게 처리하느냐에 따라 결합의 정도가 달라진다.
  • ENTITY FACTORY와 VALUE OBJECT FACTORY
    • ENTITY FACTORY는 유효한 AGGREGATE를 만들어내는 데 필요한 필수 속성만 받아들이는 경향이 있다. 불변식에서 세부사항을 필요로 하지 않는다면 생성 된 후에 추가해도 된다.
    • ENTITY는 식별성이 필요하며, 프로그램에서 식별자를 할당하는 경우라면 FACTORY가 관리하기 적절하다.
    • VALUE OBEJCT는 불변적이므로 생성물이 완전히 최종적인 형태로 만들어진다.
  • 저장된 객체의 재구성
    • 생성, 재구성 FACOTRY 간의 차이점 
      • 재구성된 ENTITY FACTORY는 새로운 ID를 할당하지 않는다. 이전 객체와의 연속성을 잃어버리게 된다.
      • 객체를 재구성하는 FACTORY는 불변식 위반을 다른 방식으로 처리한다. 불일치 문제를 해결하기 위한 전략이 필요하다.
728x90
Comments