@Entity @Table (name = "product") public class Product { @Embedded Id private ProductId id; private String name; @Convert (converter = MoneyConverter.class) private Money price; private String detail; @OneToMany ( cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, orphanRemoval = true) @JoinColumn (name = "product_id") @Order Column (name = "list_idx") private List images = new ArrayList(); pu..
애그리거트애그리거트는 관련된 객체를 하나의 그룹으로 묶어주는 단위주문(루트 애그리거트)주문서주문자주문배송정보이를 통해 복잡한 도메인 모델을 상위 수준에서 쉽게 이해하고 관리가 가능해진다.개별 객체와 상위 수준의 모델의 관계성상세 모델의 복잡성의 문제개별 객체 단위로 모델을 바라보면, 상위 수준에서의 관계를 파악하기 어려워진다.이는 코드 변경과 확장을 어렵게 만들며, 전체 모델을 이해하지 못한 상태에서의 코드 수정은 장기적으로 문제를 야기할 수 있습니다.예를 들어, 상위 수준에서 도메인 모델을 정리할 수 있다면, 주요 엔티티 간의 관계를 쉽게 파악할 수 있다.주문은회원, 상품, 결제와 관련이 있다는 것을 상위 수준의 모델에서 확인할 수 있다.애그리거트의 생애주기객체의 라이프사이클한 애그리거트에 속한 객체들..
직접 참조의 문제점편한 탐색 요용한 애그리거트 내부에서 다른 애그리거트에 접근하여 상태를 변경할 수 있게,애그리거트의 경계가 모호해지고 의존성이 증가한다.성능적 고민JPA 사용하는 경우 지연 로딩과 즉시 로딩 중 어떤 것을 사용할지 결정해야한다.애그리거트의 기능에 따라 달라짐.확장성의 문제시스템이 성장하면서 하위 도메인별로 분리하고,다양한 저장소를 사용하게됨.public class Order { private Orderer orderer; public void changeShippingInfo(ShippingInfo newShippingInfo, boolean useNewShippingAddrAsMemberAddr) { if (useNewShippingAddrAsMemberAddr) { orderer.g..
상황고객이 특정 상점을 여러 차례 신고하여 차단된 상태에서상점이 물건을 등록하지 못하도록 하는 상황을 가정상품 등록 기능을 구현한 응용 서비스는 상점 계정이 차단 상태가 아닐 때만 상품을 생성할 수 있다.기존 응용 서비스 코드 예시public class RegisterProductService { public ProductId registerNewProduct(NewProductRequest req) { Store store = storeRepository.findById(req.getStoreId()); checkNull(store); if (store.isBlocked()) { throw new StoreBlockedException(); } ProductId id = productRepository..
도메인 모델의 정의개념적 표현도메인의 주요 구성 요소, 기능 , 관계 등을 포괄적으로 이해하기 위한 모델주문 도메인 모델 예시객체 모델 구성 요소객체를 모델링하는 부분에서 유리함상태 다이어그램 이용한 주문 상태 모델링관계가 중요한 도메인인 경우 그래프로 도메인을 모델링이 가능하다.계산 규칙이 중요하다면 수학 공식을 활용해서 도메인 모델을 만들 수 있음.표현방식은 도메인을 이해할 수만 있으면 어떤 것이든 상관없다. Uploaded by N2T