쿠폰의 사용 기간 정책을 저장할 방식에 대해 고민한 내용을 정리한다.
조건부 속성 문제를 DDD + Factory Method Pattern 을 사용하여 DB 레벨에서는 nullable하게 application 레벨에서는 null을 허용하지 않게 설계하여 해결했다.
쿠폰 사용 기간에 대한 요구사항은 아래와 같다.
1. 쿠폰은 사용할 수 있는 유효 기간을 가진다. 2. 쿠폰 사용 기간 정책은 3가지로 나뉜다. 2.1.
FIXED
: 정해진 시작일과 종료일사이에만 사용할 수 있는 정책 2.2.AFTER
: 발급일로부터 특정일 이후까지 사용할 수 있는 정책 2.3.MIXED
: 발급일로부터 특정일 이후까지, 고정된 기간 내에 사용할 수 있는 정책
위의 요구사항을 데이터 관점에서 살펴보면 아래와 같은 데이터가 필요하다.
type
: 쿠폰 사용 기간 정책의 유형을 나타낸다. (예: FIXED
, AFTER
, MIXED
)after_day
: 발급일로부터 사용 기간을 계산하는 데 필요한 일수started_at
: 쿠폰의 사용 가능 시작 날짜ended_at
: 쿠폰의 사용 종료 날짜해당 데이터를 그대로 DB에 저장하면 타입에 따른 조건부 속성 문제가 발생한다.
아래는 각 타입과 타입에 필요한 데이터를 나열한다.