본문 바로가기

전체 글

(748)
[도메인 주도 개발 시작하기] 애그리거트 루트 1) 애그리거트 루트란?- 주문 애그리거트는 다음을 포함한다. (1) 총 금액인 totalAmounts를 갖고 있는 Order 엔티티(2) 개별 구매 상품의 개수인 quantity와 금액인 price를 갖고 있는 OrderLine 밸류 - 구매할 상품의 개수를 변경하면 한 OrderLine의 quantity를 변경하고  더불 Order의 totalAmounts도 변경해야 한다.  그렇지 않으면 다음 도메인의 규칙을 어기고 데이터 일관성이 깨진다주문 총 금액은 개별 상품의 주문 개수 x 가격의 합이다. - 애그리거트는 여러 객체로 구성되기 때문에 한 객체만 상태가 정상이면 안된다.  도메인 규칙을 지키려면 애그리거트에 속한 모든 객체가 정상 상태를 가져야 한다.  주문 애그리거트에서는 OrderLine을 ..
[도메인 주도 개발 시작하기] 인프라스트럭쳐 개요 1) 인프라스트럭쳐란?- 인프라스트럭쳐(Infrastructure)는 표현 영역, 응용 영역, 도메인 영역을 지원한다.  도메인 객체의 영속성 처리, 트랜잭션, SMTP 클라이언트, REST 클라이언트 등 다른 영역에서 필요로 하는  프레임워크, 구현 기술, 보조 기능을 지원한다. - DIP에서 언급한 것처럼 도메인 영역과 응용 영역에서 인프라스트럭처의 기능을 직접 사용하는 것보다  이 두 영역에 정의한 인터페이스를 인프라스트럭처 영역에서 구현하는 것이  시스템을 더 유연하고 테스트하기 쉽게 만들어준다. - 하지만 무조건 인프라스트럭처에 대한 의존을 없앨 필요는 없다.  예를 들어, 스프링을 사용할 경우 응용 서비스는 트랜잭션 처리를 위해   스프링이 제공하는 @Transactional을 사용하는 것이 ..
[도메인 주도 개발 시작하기] 애그리거트의 영속성 전파 1) 애그리거트의 영속성 전파란?- 애그리거트가 완전한 상태여야 한다는 것은   애그리거트 루트를 조회할 때뿐만 아니라   저장하고 삭제할 때도 하나로 처리해야 함을 의미한다.  (1) 저장 메서드는 애그리거트 루트만 저장하면 안 되고 애그리거트에 속한 모든 객체를 저장해야 한다(2) 삭제 메서드는 애그리거트 루트뿐만 아니라 애그리거트에 속한 모든 객체를 삭제해야 한다.  - @Embeddable 매핑 타입은 함께 저장되고 삭제되므로, cascade 속성을 추가로 설정하지 않아도 된다.    반면에 애그리거트에 속한 @Entity 타입에 대한 매핑은 cascade 속성을 사용해서   저장과 삭제 시에 함께 처리되도록 설정해야 한다. - @OneToOne, @OneToMany는 cascade 속성의 기본값..