인프런 커뮤니티 질문&답변

굿데이님의 프로필 이미지
굿데이

작성한 질문수

클론코딩에서 알려주지 않는 것들 (보안, DDD, 마이크로서비스) 2편

Value object 실습 (회원명, 연락처를 string에서 Value object로)

value object 관련

해결된 질문

작성

·

244

1

안녕하세요.

value object를 사용하는 이유를 잘 이해했습니다.

저같은 경우는 보통 외부에서 controller로 넘어올 때 값을 체크하고 기본타입을 그대로 많이 써 왔거든요.
강사님은 실제 프로젝트에서 이렇게 vo를 다 만들면서 하시는지 궁금하네요.

 

가끔 비즈니스 로직에서 유닛테스트를 한다고 할때는 email등의 값이 정상인지 체크를 해야하나 고민이 되긴 하더라고요.
vo를 쓰면 정상 값이기 때문에 그런 고민을 안해도 되겠네요.
다만 코드량이 어마어마하게 많아지니 배보다 배꼽이 더 커질것 같긴하네요.

 

확인 부탁드립니다.

감사합니다.

 

답변 1

0

애프터캠프님의 프로필 이미지
애프터캠프
지식공유자

좋은 질문입니다

저도 처음에 DDD를 배울 때 Entity의 클래스의 각 필드마다 VO를 만들어야 하나... 고민을 정말 많이 했는데요.

왜냐하면 필드가 점점 늘어날수록 작성하는 코드가 그만큼 많아지기 때문입니다.

그래서 실제 프로젝트에선 어느 정도 기준을 정해서 진행하고 있습니다. 도메인 로직이 필요한 필드는 VO로, 단순 null 체크만 필요한 필드는 VO를 사용하지 않는 식으로 기준을 정했습니다.

예를 들어, 나이가 18세 이상만 가입이 가능하다고 할 때 아래의 User class에서 age 는 VO로 만들고, timeZone (표준시간대) 같은 경우엔 특별히 도메인 로직이 필요없는 경우라서 기본 타입을 사용합니다.

class Person {
  age: Age // Age is a value object
  timeZone: string
}

 

저같은 경우는 보통 외부에서 controller로 넘어올 때 값을 체크하고 기본타입을 그대로 많이 써 왔거든요.

저도 필수값이 누락되는 경우를 방지하기 위해서(강의에선 VO에서 직접 값 누락을 체크하는 로직을 넣었지만..) 자바스크립트에서 사용하는 라이브러리를 사용해서 controller에서 선제적으로 체크하고 문제있으면 도메인 레이어 코드 실행 전에 바로 응답을 보내도록 하고 있습니다.

 

 

굿데이님의 프로필 이미지
굿데이

작성한 질문수

질문하기