/////
Search
Duplicate
6️⃣

애그리거트를 팩토리로 사용하기

: 중요한 도메인 로직 처리를 응용 서비스에 노출시키지 않기 위해 애그리거트를 팩토리로 이용하는 것이다.
public class Store { public Product createProduct(ProductId newProductId, ... ) { if (!isBlocked()) throw new StoreBlockedException(); return new Product(newProductId, getId(), ...); } } public class RegisterProductService { public ProductId registerNewProduct(NewProductRequest req) { Store store = storeRepository.findStoreById(req.getStoreId()); checkNull(store); ProductId id = productRepository.nextId(); Product product = store.createProduct(id, ...); // Store에서 직접 생성 productRepository.save(product); return id; } }
Java
복사
: Store 애그리거트의 createProduct()Product 애그리거트를 생성하는 팩토리 역할을 한다.
: 애그리거트를 팩토리로 사용하여 가능 여부를 확인하는 도메인 로직을 변경해도 도메인 영역의 Store만 변경하면 되고 응용 서비스는 영향을 받지 않는다. 즉 의존성을 없애고 도메인의 응집도도 높아졌다.
: 판매자가 정지되었는지를 확인하고 상품을 등록하는 로직을 수행할 때, 먼저 판매자의 요청으로 상품 등록을 수행하는 API가 들어올 것이고 이를 수행하는 응용 계층의 서비스가 해당 도메인 로직을 불러온다. 이때 응용 서비스는 판매자가 정지된 사용자이건 정지되지 않은 사용자이건 관심이 없다. 단순히 상품을 등록할 뿐이므로 이는 판매자의 도메인 모델에 넣어두고 은닉시키는 것, 그리고 이에 대한 처리 결과만 단순히 리턴해주면 되는 것이다.