DDD
우아한 객체지향 후기 및 정리
https://www.youtube.com/watch?v=dJ5C4qRqAgA 우아한 형제들에서 진행한 우아한 객체지향 세미나에 가고 싶었는데 아쉽게도 가지 못했다. 발표해주시는분이 객체지향의 사실과 오해를 쓰신 조영호분이라서 더 가보고 싶었는데 아쉽다. 책에 내용이 좋아서 동영상으로라도 보고 싶었는데 유튜브에 동영상이 올라와서 보고 정리해본다. 개념 - 설계는 코드에 어디에 놓을건지를 정하는 것. - 의존성 문제의 핵심은 코드 변경시 영향을 주는지이다. - 의존성 문제는 디커플링이 되어야 한다. 관계설명 연관관계 (Association) A 클래스에 B클래스로 갈수 있는 영구적인 방법이 있는 경우 A → B class A { private B b; } 의존관계 (Dependency) A ---> B (..
DDD. 응용서비스 코드 규칙과 트랜잭션 관리
도메인 응용서비스 관련 내용을 진행하기 전에 도메인에 대해 간단하게 정리해보자. 응용서비스에서 가장많이 사용하게 되는 부분은 도메인이다. 도메인에서 담당하는 역할은 도메인 내부에 있어야한다. 특히 도메인의 데이터를 조작하는 경우에는 도메인을 사용하는 응용서비스 영역에 배치되게 되면 응용서비스 영역에서 사용할 때마다 중복코드가 발생할 간으성이 크다. (도메인 관련 validation 체크도 도메인 내부에서 진행하는 것을 추천) 응용서비스 응용서비스는 표현영역과 도메인 영역을 연결하는 매개체 역할을 하는데 이는 디자인 패터의 파사드(Fasade)패턴과 같다. 응용서비스의 크기 응용서비스는 보통 다음 두가지 방법 중 한가지 방식으로 구현한다. 1. 한 응용서비스 클래스에 회원 도메인의 모든 기능을 구현한다. ..
DDD. 애거리루트 정리
애그리거트는 관련된 객체를 하나의 군으로 묶어주는 것 으로 상위수준에서 모델을 조망하는 방법 중 하나이다. 애그리거트는 비슷한 속성을 가진 객체를 묶어놓은 것을 의미한다. 예를 들어 주문 시스템에 주문 관련 애그리거트는 Order, Receiver, OrderLine.. 등이 있고 회원정보에는 Member, MemberInfo등으로 나눌 수 있다. 각 애그리거트에 연관된 객체를 담고 있으며 유사하고 동일한 라이프 사이클을 보유하고 있다. 애거리거트 루트 애그리거트에서 가장 핵심이 되는 주체 즉, 애그리거트 전체를 관리하고 책임지는 주체를 애그리거트의 루트 엔티티라고 한다. 애그리거트내에 존재하는 모든 엔티티는 루트 엔티티와 직간접적으로 연결되어있다. 애거리거트 루트의 핵심 역할은 애거리거트의 일관성을 유..
DDD. DIP 의존 역전 원칙
서비스가 특정 시스템에 의존성을 가지게 되면 서비스 자체만으로 테스트 수행이 어렵고 종속되는 시스템에 따라 서비스의 코드가 지속적으로 변경될 여지가 있다. 이를 해결하기 위해서 DIP개념을 사용할 수 있다. DIP 제품의 할인율을 구하는 서비스가 있다고 가정해보자. 이 서비스는 의미 있는 단일 기능을 제공하는 고수준 모듈이다. 그리고 이 고수준 모듈의 기능 구현을 위해서 현재 가격과 할인 %등을 구하는 여러 하위 기능이 필요하다. 이때 이 기능들은 하위 기능을 실제로 구현한 저수준 모듈이라고 한다. 고수준 모듈이 저수준 모듈 여러개의 의존성을 가지게 된다면 테스트와 여러 기능 수정 때마다 변경이 생긴다. 그럼 이를 해결하기위해서는 저수준 모듈이 고수준 모듈을 의존하게 만들어야 하는데 이를 위해서는 추상화..
DDD. 도메인 주도 개발 시작
도메인 모델 도메인 모델은 특정 도메인을 개념적으로 표현하는 것 도메인을 이해하려면 도메인이 제공하는 기능과 도메인의 주요 데이터 구성을 파악해야 한다. 도메인을 표한하는 방법은 Order, Ship, Pay와 같이 객체로 구별하는 방식과 상태에 따르게 방식이 진행되도록 설계하는 상태 다이어그램을 통해 모델링을 구현할 수 있다. 도메인 모델은 기본적으로 도메인 자체를 이해하기 위한 모델이다. 도메인 모델 일반적인 애플리케이션 아키텍쳐는 4단계 계층으로 구성된다. Layer 설명 UI 사용자에게 보여주는 정보 Application 사용자가 요청한 기능이 실행됨 도메인 시스템이 제공할 도메인의 규칙을 구현 Infrastructure 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리 도출한 모델..