DDD

· DDD
애그리거트간에 참조 한 객체가 다른 객체를 참조하는 것 처럼 애그리거트도 다른 애그리거트를 참조한다. 애그리거트의 관리 주체가 애그리거트 루트이므로 애그리거트에서 다른 애그리거트를 참조하는 것은 애그리거트의 루트를 참조하는 것과 같다. 애그리거트를 참조하면 한 애그리거트에서 다른 애그리거트를 수정하지 않도록 주의해야 한다. JPA를 사용할 경우 지연(Lazy)로딩과 즉시(Eager)로딩 두가지 방식으로 로딩이 가능하다. 아이디를 이용한 간접 참조 ID를 이용한 참조는 DB 테이블에서 외래키를 사용해 참조한다. 장점 한 애그리거트에서 다른 애그리거트를 수정하는 문제를 원척적으로 방지할 수 있다. 애그리거트의 경계를 명확히 하고 물리적인 연결을 제거하기 때문에 모델의 복잡도를 낮춰준다. 애그리거트 간의 의존..
· 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
엔티티(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)