도메인 주도 설계

시스템 간 강결합은 어떻게 없앨 수 있을까? 쇼핑몰에서 구매 취소를 하면 환불 처리가 되어야 한다. 이때 환불기능을 실행하는 주체는 주문 도메인이 될 수 있으며, 환불 기능을 실행하기 위해서 환불 도메인 서비스를 파라미터로 전달받아 실행할 수 있다. class Order { // 외부 서비스 실행을 위해 도메인 서비스를 파라미터로 전달 받음 fun cancel(refundService: RefundService) { verifyNotYetShipped() this.state = OrderState.CANCELED this.refundStatus = State.REFUND_STARTED try { refundService.refund(getPaymentId()) this.refundStatus = Stat..
도메인 모델과 경계 도메인을 완벽하게 표현하는 단일 모델을 만드려는 시도를 하지 말자!! 한 도메인은 다시 여러 하위 도메인으로 구분되기 때문에 여러 하위 도메인을 모두 표현하려고하면 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다. 하위 도메인마다 같은 용어라도 의미가 다를 수 있음 하위 도메인마다 같은 대상이라도 지칭하는 용어가 다를 수 있음 따라서, 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야한다. case1. 같은 용어라도 의미가 다른 경우 (feat. 상품 모델) 카탈로그 도메인에서의 상품 상품 이미지, 상품명, 상품 가격, 상세 설명 과 같은 상품 정보 위주 재고 관리 도메인에서의 상품 실존하는 개별 객체를 추적하기 위한 목적으로 사용 주문 도메인에서의 상품 배송 ..
표현 영역(Presentation Layer) 사용자의 요청을 해석 사용자가 실행하고 싶은 기능을 판별하고 그 기능을 제공하는 응용 서비스를 실행 응용 서비스의 메서드가 요구하는 파라미터와 표현 영역이 사용자로부터 전달받은 데이터는 형식이 일치하지 않기 때문에 표현 영역은 서비스가 요구하는 형식으로 사용자 요청을 변환 필요 응용 영역(Application Layer) 실제 사용자가 원하는 기능을 제공 @PostMapping("/member/join") fun join(req: HttpServletRequest): ModelAndView { val emal = req.getParameter("email") val password = req.getParameter("password") // 요청을 응용 서비..
Application Layer ? Domain Layer ? 앞에서 선택한 아키텍처를 사용하게 되면 응용 영역에서 사용자에게 제공해야할 기능을 구현하게 된다. 주문이란 하위 도메인을 예로 들면 주문 등록, 주문 취소, 상품 상세 조회와 같은 기능을 제공한다. 응용 영역(Application)은 기능을 구현하기 위해 도메인 영역에 존재하는 도메인 모델을 사용한다. class CancelOrderService { @Transactional fun cancelOrder(orderId: String) { val order = findOrderById(orderId) if (order == null) throw new OrderNotFoundException(orderId) order.cancel() // 위임..
도메인이란 무엇을 뜻할까? 도메인을 한 줄로 정의하자면 소프트웨어로 해결하고자 하는 문제 영역을 뜻한다. 만약, 우리가 온라인 서점이라는 서비스를 제공한다면 온라인 서점은 도메인(domain)이 될 수 있다. 그리고 도메인은 여러 하위 도메인으로 구성된다. 온라인 서점 (도메인) 주문 (하위 도메인) 정산 (하위 도메인) 배송 (하위 도메인) 결제 (하위 도메인) 고객이 책을 주문하고 결제하면 책이 배송된다. 이렇게 하위 도메인은 다른 도메인이랑 엮이면서 완전한 기능을 제공하게 된다. 도메인 모델? 다양한 정의가 존재하는데 아래 내용만 짚고 넘어가자 특정 도메인을 개념적으로 표현한 것 도메인이 제공하는 기능(메소드)와 주요 데이터(프로퍼티)를 가지고 있는 모델 도메인 계층을 구현할 때 사용하는 객체 모델..
깡냉쓰
'도메인 주도 설계' 태그의 글 목록