여러 애그리거트가 필요한 기능(도메인 서비스가 필요한 이유) 도메인 영여그이 코드를 작성하다보면 한 애그리거트로 기능을 구현할 수 없을 때가 있다. 대표적인 예가, 결제 금액 계산 로직인데 아래와 같은 사항들을 고려볼 수 있다. 상품 애그리거트 : 구매하는 상품의 가격. 또는 상품에 따라 추가되는 배송비 ...
[도메인주도개발시작하기] Chapter6-응용 서비스와 표현 영역
표현 영역과 응용 영역 응용 영역과 표현 영역은 사용자와 도메인을 연결해주는 매개체 역할을 한다. 응용 영역의 책임 응용 영역은 실제 사용자가 원하는 기능을 제공한다. 표현 영역의 책임 응용 서비스가 요구하는 형식으로 사용자 요청을 변환 응용 서비스를 실행 한 후 실행 결과를 사용자에 알맞은 형식으로 응답 사용자와의...
[도메인주도개발시작하기] Chapter5-스프링 데이터 JPA를 이용한 조회기능
시작에 앞서 CQRS 는 명령(COMMAND) 모델과 조회(Query) 모델을 분리하는 패턴이다. 명령 모델은 상태(데이터)를 변경하는 기능을 구현할 때 사용된다(ex. 회원 가입, 암호 변경, 주문 취소) 조회 모델은 데이터를 조회하는 기능을 구현시 사용된다.(ex. 주문 목록, 주문 상세) 주문...
[도메인주도개발시작하기] Chapter4-리포지터리와 모델구현(JPA 중심)
JPA를 이용한 리포지토리 기능 구현 모듈 구현 2장에서 언급한 것처럼 리포지토리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고, 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다. 팀 표준에 따라 리포지터리 구현 클래스를 domain.impl과 같은 패키지에 위치시키는 경우도 있다. 이는 리포지터리 인터페이스와 구현체...
[클린코드] Chapter6-객체와 자료 구조
자료 추상화 구현을 감추려면 추상화가 필요하다. 그저 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되진 않는다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. //구체적인 Vehicle 클래스 public interface Vehicle { double...
[Architecture] 읽으면 유용한 아키텍처 관련 칼럼 모음
Reference https://medium.com/coupang-engineering/%EB%8C%80%EC%9A%A9%EB%9F%89-%ED%8A%B8%EB%9E%98%ED%94%BD-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%BF%A0%ED%8C%A1%EC%9D%98-%EB%B0%B1%EC%9...
[도메인주도개발시작하기] Chapter3-애그리거트
애그리거트 백 개이상의 테이블을 한장의 ERD에 모두 표시하면 개별 테이블 간의 관계를 파악하느라 큰 틀에서 데이터 구조를 이해하는데 어려움을 겪게 되는 것처럼, 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조나 큰 수준에서 도메인 간의 관계를 파악하기 어려워진다. 주요 도메인 개념 간의 관계를 파...
[도메인주도개발시작하기] Chapter2-아키텍처 개요
네 개의 영역 표현 영역 표현 영역(UI영역)은 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 한다. 표현 영역의 사용자는 웹 브라우저를 사용하는 사람일 수 도 있고, REST API 를 호출하는 외부 시스템일 수도 있다. 표현 영역을 통해 사용자의 ...
[도메인주도개발시작하기] Chapter1-도메인 모델 시작
도메인 온라인 서점(쇼핑몰) 소프트웨어는 온라인으로 책을 판매하는데 필요한 상품조회, 구매, 결제, 배송 추적 등의 기능을 제공해야 한다. 이때 ‘온라인 서점’은 소프트웨어로 해결하고자 하는 문제 영역, 즉 도메인에 해당한다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. [그림1.1] 도메인은 여러 하위 도메인으로 구성된다. ...
[클린코드] Chapter5-형식 맞추기
프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. (ex. intellij의 codestyle이 이러한 도구 중 하나가 될 것 같다) 형식...