Layered Architecture

  • SoC를 아키텍처 레벨에서 가능하게 해주는 패턴
  • 계층을 나누어 각 계층의 관심사에 집중할 수 있도록 한다.
  • 일반적으로 사용자 인터페이스, 응용, 도메인, 인프라스트럭쳐 계층이 있다.


도메인 모델 빌딩블럭

엔티티(Entity)

  • 어떤 객체를 일차적으로 해당 객체의 식별성으로 정의
  • 객체의 생명주기 내내 이어지는 추상적인 연속성
  • 엔티티의 속성 보다는 정체성에 초점


Value Object

  • 개념적 식별성을 갖지 않으면서 도메인의 서술적 측면을 나타내는 객체
  • 모델에 포함된 어떤 요소의 속성에만 관심
  • 불변적
  • 객체의 수가 많아질 수 있으므로 객체를 고유하여 최적화 가능


Service

  • 모델에서 독립적인 인터페이스로 제공되는 연산
  • 다른 객체와의 관계를 강조
  • 연산의 명칭은 Ubiquitous language에 도입되어야 함
  • 매개변수와 결과는 도메인 객체여야 함
  • 도메인 계층에서만 이용되는 것은 아님
  • 각 계층의 서비스와 도메인 서비스를 적절하게 나누는 것이 중요 함


Module

  • 패키지
  • 일련의 응집력있는 개념
  • 모듈의 이름은 도메인에 통찰력을 줄 수 있어야 함


도메인 객체의 생명주기


도메인객체의 관리 문제

  • 생명주기 동안의 무결성 유지하기
  • 생명주기 관리의 복잡성으로 모델이 난해해지는 것을 방지하기

해결방법

Aggregate

  • 소유권과 경계를 명확히 정의하여 객체 간의 연관관계가 복잡해지지 않도록 한다
  • 도메인 객체의 무결성 유지에 중요 함
  • 생명주기의 전 단계에서 불변식이 유지돼야 할 범위를 표시

Factory

  • 생명주기의 초기단계
  • 복잡한 객체와 Aggregate를 생성하고 재구성

Repository

  • 생명주기의 중간과 마지막
  • 영속 객체를 찾아 조회하는 수단
Aggregate
  • root와 boundary
  • boundary : 무엇이 포함되고 무엇이 포함되지 않는지 정의
  • root : 단 하나만 존재, 특정 엔티티
  • 경계 바깥의 객체는 해당 Aggregate의 구성요소 가운데 root 만 참조 가능
  • 불변식 : 데이터가 변경될 때마다 유지돼야 하는 일관성 규칙
  • 구현 규칙
    • 루트 엔티티는 전역 식별성을 지니며 불변식을 검사할 책임이 있다
    • 루트는 Value Object의 복사본을 단른 객체에 전달해 줄 수 있다
    • 삭제 연산은 경계안의 모든 요소를 한번에 제거해야 한다.
    • 변경시 전체 불변식은 반드시 지켜져야 한다




전역식별성

지역식별성

+ Recent posts