DDD ์ ์ฉํ๊ธฐ - 1 ๊ฐ๋ ์ ํ ๋๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ค.
์ง๋๋ฒ์ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ ๊ฐ์ ธ์ ๋ณด์๋ค. DDD ์ ์ฉ ์ด์ ๊ณผ ๊ฐ์ฅ ๋ฌ๋ผ์ง ์ ์ Question์ด Entity์์ Value๊ฐ ๋์๋ค๋ ๊ฒ์ด๋ค.
Form๊ณผ Question์ ์ผ๋๋ค ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ๋ฐธ๋ฅ ์ปฌ๋ ์ ์ ๋ณ๋ ํ ์ด๋ธ๋ก ๋งคํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. @ElementCollection๊ณผ @CollectionTable์ ํตํด ๊ตฌํํ ์ ์๋ค.
@OneToMany(mappedBy = "form")
private List<Question> questionList;
@ElementCollection
@CollectionTable(name = "Question", joinColumns = @JoinColumn(name = "orderId"))
@OrderColumn(name = "questionId")
private List<Question> questionList;
์ด๊ณณ์์ ์กฐ์ธํ๊ณ ์ ํ๋ ํ
์ด๋ธ ์ด๋ฆ์ @CollectionTable์ name์ผ๋ก ์ง์ ํ๊ณ joinColumns๋ก ์ธ๋ถํค๋ก ์ฐ์ผ ์ปฌ๋ผ๋ช
์ ์ง์ ํ ์ ์๋ค.
๋, @OrderColumn์ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค๋ก ์ฐ์ผ ์ด๋ฆ์ ์ง์ ํ ์ ์๋ค.
@Getter
@Setter
@Entity
@Table(name = "Question")
@NoArgsConstructor
@EqualsAndHashCode(of = "id")
public class Question extends AbstractTimestamp {
...
}
@Embeddable
@EqualsAndHashCode(of = "id")
public class Question extends AbstractTimestamp {
...
protected Question() {
}
...
}
์ผ๋์ผ ๊ด๊ณ์ Value์ ๋ง์ฐฌ๊ฐ์ง๋ก @Entity ๋์ @Embeddable๋ก ๋งคํ ์ค์ ํ๋ค.
์ด์ ๊ณผ๋ ๋ฌ๋ฆฌ Value๋ ๋ถ๋ณํด์ผํ๋ฏ๋ก Getter, Setter๋ฅผ ์ ๊ฑฐํ๊ณ , JPA ์ ์ฉ์ ์ํด ๊ธฐ๋ณธ ์์ฑ์๋ protected๋ก ์ง์ ํ์ฌ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๋ณดํธํ๋ค.
์ด์ ์๋ ์์ ๊ฐ์ ๊ณ์ธตํ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. Controller ์ญํ ์ ํ๋ ํด๋์ค๋ ๋ชจ๋ controller ํจํค์ง ํ์์ ์์นํ๋ค. ํจํค์ง๋ง์ ๋ณด๊ณ ํ๋ก์ ํธ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ ํ์ ์ ๊ฐ๋ฅํ์ง๋ง, ํจํค์ง๋ง๋ค ๋๋ฌด ๋ง์ ํด๋์ค๋ฅผ ํฌํจํ๊ณ ๊ทธ๋ค๋ผ๋ฆฌ์ ์ฐ๊ด๊ด๊ณ ํ์ ๋ฑ์ด ์ด๋ ต๋ค.
ํ์ฌ presentation, application, domain, infrastructure ๊ฐ ๊ณ์ธต ์์์ ๋๋ฉ์ธ๋ณ๋ก ํจํค์ง๋ฅผ ๋๋์ด ๊ตฌ์ฑํ๋ค. ์์ธํ ๋ค์ฌ๋ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
ํจํค์ง๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ์์ด์ Info, Command, Request, Response ๋ฑ์ ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ธ์ฃผ์ด ์ํฐํฐ๋ฅผ ์ง์ ์ ๋ฌํ์ง ์๋๋ก ํ์๋ค. ํจํค์ง ์์กด ๋ฐฉํฅ์ด ๋ชจ๋ domain ๊ณ์ธต์ ๋ฐ๋ผ๋ณด๊ณ , ๋๋ฉ์ธ ๋ณ ์์ง๋๊ฐ ๋์์ก๋ค.
์์ง ์์ฉ ์๋น์ค ๋จ๊ณ๊น์ง ์ฝ๋๋ฅผ ์์ฑํ์ง ์์ ๋ค์ ์กฐ๊ทธ๋งฃ์ง๋ง ํ์ฌ๊น์ง์ ํจํค์ง ๊ตฌ์กฐ์ ์ผ๋ถ๋ฅผ ์์๋ก ๊ฐ์ ธ์๋ค. constant๋ Entity์ ํฌํจ๋ ENUM ๊ฐ๋ค์ ๋ชจ์๋์ ํจํค์ง๋ค.
๋ณ๊ฒฝํ ํจํค์ง ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
๊ธฐ์กด์๋ PlanStatus๊ฐ ์ด๋์ ์ฐ์ด๋๊ฑด์ง ๋ฐ๋ก ํ์ ํ๊ธฐ ์ด๋ ค์ ๋ค๋ฉด, User ๋๋ฉ์ธ ์์ ์๋ฆฌํ PlanStatus๋ ์ ์ ์ ๊ตฌ๋งค ์ฌ๋ถ๋ฅผ ๋ํ๋์ ์์์ฐจ๋ฆฌ๊ธฐ ์ฌ์์ก๋ค. ๋ ๊ฐ์ ํจํค์ง ์์ ์์นํ์ฌ ํจํค์ง๊ฐ import๊ฐ ํ์ ํ ์ค์ด๋ฌ์ ํ์ธํ ์ ์์๋ค.
๊ทธ ์ธ์๋ ์ค๊ณ์ ๊ณ ๋ คํ ์ ์ ์๋์ ๊ฐ๋ค.