본문 바로가기

ddd14

DDD - Service - 출처: 도메인 주도 설계 - 에릭 에반스 - 들어가기전에 DDD의 Service를 언급하기전에 한 가지 확실히 해두고 싶은 점이 있다. 이 글에서 언급하고자 하는 DDD의 service는 project에서 많이들 구성하는 controller, service, repository 계층 에서 말하는 응용 계층의 service와 다르다. - Service service는 개념적으로 어떤 객체에도 종속되지 않는다. 어떤 객체에 종속시키기 애매한 무엇인가가 있다면 억지로 해당 객체로 밀어넣으려고 하기 보다는 service로 추출하여 모델링에 포함시키는 방법도 존재한다. 보통 service는 entity나 VO에 포함되지 않는 도메인의 연산이 활동이나 행동으로 나타나는 경우가 많다. 이런 도메인 연산은 여러 도.. 2022. 8. 7.
DDD - Value Object - 출처: 도메인 주도 설계 - 에릭 에반스 - Value-Object (VO) VO는 개념적인 식별성이 없고 사물의 어떤 특징을 묘사하는 객체이다. 예를 들어 어떤 아이가 펜으로 그림을 그리려고 하고 있다고 가정해보자. 만약 똑같은 색과 굵기와 모양의 펜이 2개가 있다면 아이는 어떤 펜을 사용해도 도 크게 개의치 않을것이다. VO는 설계요소가 어느것인지가 아닌 무엇인지에 관심이 있다고 할 수 있다. - "주소"는 VO인가? VO와 Entity에 관련된 글이나 자료를 보다 보면 자주 떠오르는 유형의 의문점이 있다. VO와 Entity의 차이 혹은 "주소"는 VO일까? 와 같은 유형의 질문이다. 이 질문에 해답역시 앞의 Entity 장에서 살펴본것과 같이 도메인에서 해결하고자 하는 문제에 따라 다르다. 전.. 2022. 7. 19.
DDD - Entity - 출처: 도메인 주도 설계 - 에릭 에반스 - 개요 객체는 본질적으로 속성이 아닌 연속성과 식별성으로 정의 된다. 속성은 객체의 생명주기 동안 계속해서 변해간다. 어릴 때의 나와 현재의 나를 비교해보면 키, 친구들 많은 것이 변했으며 심지어는 이름이 변하는 경우도 있다. 하지만 식별성은 지속되는데 어릴 때의 '나'와 지금의 '나'는 동일하다. Entity는 생명주기 동안 형태와 내용은 급격하게 변하지만 연속성은 유지해야 한다. 그리고 이런 Entity를 추적하려면 식별성이 정의되어 있어야 한다. 우리가 좌석 예약 시스템을 만든다고 가정해보자. 만약 좌석을 예약하고 발급받은 입장권에 좌석번호가 명시된 경우 좌석번호를 Entity의 식별성으로 사용해야 한다. 반면 어떤 경우에는 단순히 일반석이라고 등급만 .. 2022. 7. 17.
DDD - S/W와 모델 - 출처: 도메인 주도 설계 - 에릭 에반스 - S/W 에서 표현되는 모델 S/W 에서는 모델을 표현하는 주요 패턴으로 3가지 형태가 주로 사용된다. Entity: 어떤 객체가 영속성과 식별성을 지닐 때 VO: 다른 무언가의 상태를 기술하는 속성에 불과할 때 Service: 객체보다 행동/연산으로 더 명확하게 표현되는 경우 자바라면 class, Golang 이라면 struct로 표현하기만 하면 되는데 왜 굳이 Entity와 VO라는 개념을 도입해서 나누는지 의문을 가질 수도 있다. 굳이 이렇게 하는 이유는 특정 객체가 특정 패턴을 따르면 객체의 역할이 더욱 명확해져서 설계 결정을 하는데 도움이 되기 때문이다. Entity와 VO만 있으면 객체를 표현할 수 있는데 Service라는 개념은 왜 필요할까? .. 2022. 7. 16.