DDD

· DDD
어떤 경우 사용하나? 두 개 이상에 프로퍼티를 한 개 컬럼에 매핑해야 할때 사용한다. DB 컬럼과 밸류를 양방향으로 변환시켜 준다. 이처럼 변환되는 코드를 모델에 구현하지 않고 AttributeConvertor를 사용해서 변환처리를 한다. 예를 들어 Length 밸류 객체는 int value와 String unit 필드를 가지고 있을때 DB상에는 value+unit로 저장된다. AttributeConverter Interface package javax.persistence; public interface AttributeConverter { public Y convertToDatabaseColumn (X attribute); // 밸류 타입을 DB 컬럼 값으로 변환 public X convertToEn..
· DDD
@SecondaryTable을 이용한 밸류 매핑 한 테이블 내부에 컬럼을 다른 테이블에서 관리할 때가 있다. (밸류 컬렉션을 별도 테이블로 매핑) 만약 자식 테이블에서 외부키를 부모 테이블과 같이 쓰는 경우가 있는데 이때 @SecondaryTable과 @AttributeOverride를 이용해서 자식 테이블과 식별자를 매핑한다. 자식 테이블은 식별자가 존재하지만 밸류로 속하고 엔티티라고 볼 수 없다. 무조건 연관되어 두개의 테이블 모두 가져와야 할때(Inner Join)만 사용해야 한다. 예시 상품에 상품 소개 내용과 재고 정보를 사용 ProductContents = 상품 소개 내용, ProductStock = 재고 정보 @Entity @Table(name = "product") @Where(clause..
· DDD
엔티티(Entity) 식별자를 갖는 객체 식별자 유형 특정 규칙에 따라 생성 UUID 사용 (java.util.UUID) 값을 직접 입력 일련번호 사용(시퀀스나 DB의 자동 증가 컬럼 사용)\ // 엔티티 클래스 @Entity @Table(name = "member") public class Member() { @Id private int id; // 식별자 } 밸류(Value) 타입 개념적으로 완전한 하나를 표한할 때 사용한다. 예를들어 주소(zipcode, address, detailAddress), 받는 사람(name, phoneNumber) 등등 // 엔티티 클래스 @Entity @Table(name = "member") public class Member() { @Id private int id..
· DDD
BOUNDED CONTEXT 간 직접 통합 서비스를 구축하다 보면 두 BOUNDED CONTEXT 간에 통합이 필요할 때가 있다. 두 BOUNDED CONTEXT를 직접적으로 통합하는 방식으로 주로 두 BOUNDED CONTEXT 간에 REST API를 호출하는 방식(직접 통합)이 있다. 두 BOUNDED CONTEXT을 통합하는 도메인 서비스를 사용한다. // 상품 추천 기능을 표현하는 카탈로그 도메인 서비스 public interface ProductRecommendationService { public List getRecommendationsOf(ProductId id); } 도메인 서비스를 구현한 클래스는 infraStructure 영역에 위치한다. 만약 외부 시스템에서 받아온 데이터가 내부에서..
· DDD
고객 / 공급자 관계를 갖는 BOUNDED CONTEXT 두 BOUNDED CONTEXT간 관계 중 가장 흔한 관계는 한쪽에서 API를 제공하고 다른 한쪽에서는 그 API를 호출하는 관계이다. 이 관계에서 API를 사용하는 BOUNDED CONTEXT는 API를 제공하는 BOUNDED CONTEXT에 의존하게 된다. 공개 호스트 서비스(OPEN HOST SERVICE) 공개 호스트 서비스의 대표적인 예는 검색이다. 블로그, 카페, 게시판과 같은 서비스를 제공하는 포탈은 각 서비스 별로 검색 기능을 구현하기 보다 검색을 위한 전용 시스템을 구축하고 검색 시스템과 각 서비스를 통합한다. 이때 상류 컴포넌트는 검색 시스템이고, 하류 컴포넌트는 블로그, 카페, 게시판이 된다. 상류 컴포넌트의 서비스는 상류 BO..
· DDD
의존성이란? 변경에 의한 영향을 받는 경향 B가 변경될때 A도 함께 변경 → A가 B에 의존하고있다. 클래스 의존성 Association (연관관계) class A { private B b; } Dependency(의존관계) class A { public B method(B b) { return new B(); } } Inheritance(상속관계) class A extends B { } Realization(실체화 관계) class A implements B { } 패키지 의존성 패키지에 포함된 클래스 사이의 의존성 예를들어 A패키지에서 클래스에서 B패키지에 있는 클래스에 의존성이 있다면 패키지 의존성이 존재한다. 좋은 의존성은? 1. 양방향 의존성을 피하라! Bi-Directional(양방향) A가 ..
· DDD
애그리거트란? 관련된 객체를 하나로 묶은 군집 도메인이 커질수록 개발할 도메인 모델도 커지면서 엔티티와 밸류가 많아질수록 모델은 점점 복잡해진다. 개별 도메인 모델에만 집중하다 보면 큰 수준에서 모델을 이해하지 못해 큰 틀에서 모델을 관리 할 수 없게 된다. 도메인 모델을 개별 객체뿐만 아니라 상위 수준에서 모델을 볼 수 있어야 이해하는데 도움이 된다. 그러므로 애그리거트로 관련된 객체를 묶어 전체적인 모델의 이해를 돕는다. 애그리거트 구성할때 주의할점! 한 애그리거트에 속한 객체는 다른 애그리거트에 속하지 않는다. 각 애그리거트는 독립적이며 자기 자신만 관리할 뿐 다른 애그리거트를 관리하지 않는다. 함께 생성되고 제거되는 구성요소는 한 애그리거트에 속할 가능성이 높다.(같은 라이프 사이클) 함께 변경되..
· DDD
BOUNDED CONTEXT 도메인마다 같은 용어라도 의미가 다르고 같은 대상이라도 저장하는 용어가 다를 수 있다. 그러므로 도메인을 완벽하게 표현하는 단일 모델을 만드는 것은 불가능 하다. 모델은 특정한 컨텍스트(문맥)하에서 완전한 의미를 갖는다. 이렇게 구분되는 경계를 갖는 컨텍스트를 DDD에서는 BOUNDED CONTEXT라고 부른다. BOUNDED CONTEXT는 모델의 경계를 결정하며 한 개의 BOUNDED CONTEXT는 논리적으로 한 개의 모델을 갖는다., 하지만 그렇지 않은 경우가 많다. BOUNDED CONTEXT는 각자 구현하는 하위 도메인에 맞는 모델을 갖는다. 조직 구조에 따라 BOUNDED CONTEXT 결정 예를 들어, 주문 하위 도메인이라도 주문을 처리하는 팀과 복잡한 결제 금..
beekei
'DDD' 카테고리의 글 목록 (2 Page)