Post
EN

DDD start 4

4장을 읽다보니 Entity와 Value의 구분이 애매모호 했다.

검색해서 찾던 중 http://cyberx.tistory.com/57 블로그에서 정리된 내용으로 이해를 할 수 있었다.

Entity

  • 속성이 아닌 식별성을 기준으로 정의되는 도메인 객체.

ex) DB , ERD

Value object

  • 식별성이 아닌 속성을 이용해 정의되는 불변 객체

  • 모든 것이 식별성을 부여하고 Entity로 관리한다면 복잡성 증가

  • 과거 Java의 DTO(Data Transfer Object) 패턴의 Value Object과 관계 없음.

  • Entity와 Value Object를 구별하는 첫 번째 조건은 식별성 ( ID)

  • 식별성을 가지만 Entity 그렇지 않으면 Value Object

Service

  • Domain Object에서 위치시키기 어려운 operation을 가지는 객체

  • 여러 Domain Object 다루는 연산 Service의 오퍼레이션은 일반적으로 stateless

  • Domain Object에 해당되는 역할을 Service operation으로 만드는 경우 도메인 역할을 침범하여 강 결합이 일어남.

Module

  • 유사 작업 및 개념을 그룹화 하여 복잡도를 감소시키는 기법

  • 응집도가 높은 모듈은 모듈간의 관계는 약 결합.

  • Java로 구현하는 경우 Package로 구성될 수 있다.

( 단위 묶는 부분을 이야기 하는 것 같음)

Aggregate

  • 연관된 Entity와 Value Object의 묶음. 일관성과 트랜잭션, 분산의 단위, 캡슐화를 통한 복잡성 관리

  • 예를 들어 쇼핑몰 사이트에서 주문 Entity내에 배송주소 정보를 우편번호 주소1, 주소2, 상세주소 이런식으로 각 컬럼으로 정의하는 것이 아니라, 주소라는 Value Object를 별도로 작성하고 주문 Entity는 주소 Value Object를 포함하는 방식으로 관계 일관성 및 단순화를 유지한다.

Factory

  • 복잡한 Entity의 생성 절차에 캡슐화 할 수 있는 개념

  • 생성하기 복잡한 Aggregate의 일관성 유지

  • 생성시 Aggregate의 일관성 유지

Repository

  • 도메인 영역과 데이터 인프라스트럭쳐 계층의 분리하여 데이터 계층에 대한 결합도를 낮추기 위한 방안

  • 생성된 Aggregate에 대한 영속성 관리, 조회, 등록, 수정, 삭제시 Aggregate의 일관성 유지

  • DB 및 데이터 저장소의 데이터를 조회하고 저장하는 경우 Repository를 활용한다.

Entity 객체와 Value Type의 구분.

Entity 객체는 getter, setter를 허용하는 반면.

Value Type은 불변형으로 사용한다.

This article is licensed under CC BY 4.0 by the author.