LUCATHREE.COM

← Back to list
🧐 TIL

[DDD] λͺ…μ„Έ, Specification

μž‘μ„±μΌ:
TILDDDArchitecture

λͺ…μ„Έ

μ–΄λ–€ 객체가 νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜λŠ”μ§€ ν‰κ°€ν•˜λŠ” μ½”λ“œλŠ” μΌλ°˜μ μœΌλ‘œλŠ” 객체 λ‚΄λΆ€μ˜ λ©”μ†Œλ“œλ‘œ μ •μ˜ν•  수 μžˆμ§€λ§Œ 평가 μ ˆμ°¨κ°€ λ³΅μž‘ν•˜κ±°λ‚˜ 평가 자체λ₯Ό λŒ€μƒ 객체의 λ©”μ†Œλ“œλ‘œ λ‘λŠ” 것이 μžμ—°μŠ€λŸ½μ§€ λͺ»ν•œ κ²½μš°λ„ μžˆλ‹€.
μ•žμ„œ β€˜μ‚¬μš©μž 이름 쀑볡검사’ 같은 경우 도메인 λͺ¨λΈμ— 검증 λ©”μ†Œλ“œκ°€ μžˆλŠ” 것이 λΆ€μžμ—°μŠ€λŸ½κΈ° λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€μ— κ΅¬ν˜„μ„ ν–ˆμ—ˆλ‹€. 그리고 이 경우 쑰건이 비ꡐ적 κ°„λ‹¨ν–ˆκΈ° λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€μ— κ΅¬ν˜„μ„ 해도 λ¬Έμ œκ°€ μ—†μ—ˆλ‹€.
ν•˜μ§€λ§Œ λ§Œμ•½ 쑰건을 λ§Œμ‘±ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 리포지토리λ₯Ό 톡해 정보λ₯Ό μ‘°νšŒν•΄μ•Όν•˜κ³  쑰건이 객체 μœ ν˜•μ— 따라 λ‹¬λΌμ§€κΈ°κΉŒμ§€ ν•œλ‹€λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€μ— 뢀여될 μ±…μž„μ΄ λ§Žμ•„μ§€κ³  도메인 둜직이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€μ— λ…ΈμΆœλ  κ°€λŠ₯성도 λ†’λ‹€.
이λ₯Ό μœ„ν•œ λŒ€μ±…μœΌλ‘œ λͺ…μ„Έ(Specification)λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

λͺ…μ„Έμ˜ μ‚¬μš©λ²•

λͺ…μ„ΈλŠ” 객체가 쑰건을 λ§Œμ‘±ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” μ—­ν• λ§Œμ„ μˆ˜ν–‰ν•œλ‹€. 도메인 κ·œμΉ™μ„ λ‹΄κ³  μžˆμœΌλ―€λ‘œ 도메인 객체에 ν•΄λ‹Ήν•˜μ§€λ§Œ μ—”ν‹°ν‹°λ‚˜ κ°’ 객체 λŒ€μ‹  리포지토리λ₯Ό 닀루고 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ„λ‘ λ•λŠ”λ‹€.
객체λ₯Ό ν‰κ°€ν•˜λŠ” μ½”λ“œλ₯Ό 객체 내뢀에 κ΅¬ν˜„ν•˜λ©΄ 객체의 역할이 λΆˆλΆ„λͺ…ν•΄μ§€κ³  μ›λž˜ μ˜λ„κ°€ 잘 λ“œλŸ¬λ‚˜μ§€ μ•Šκ²Œ λœλ‹€. 이럴 λ•Œ λͺ©μ μ— 따라 μ½”λ“œλ₯Ό λͺ…μ„Έλ‘œ λΆ„λ¦¬ν•˜λ©΄ 객체 μžμ‹ μ˜ μ˜λ„λ„ 잘 λ“œλŸ¬λ‚˜κ²Œ 되고 평가 쑰건 λ˜ν•œ λͺ…μ„Έλ‘œ λ“œλŸ¬λ‚˜κ²Œ λ˜λŠ” μž₯점이 μžˆλ‹€.

리포지토리 μ‚¬μš©μ˜ 자제

λͺ…μ„ΈλŠ” κ°’ κ°μ²΄λ‚˜ μ—”ν‹°ν‹° λŒ€μ‹  리포지토리λ₯Ό 닀루도둝 ν•˜λŠ”λ°, λͺ…μ„Έ λ˜ν•œ μ—„μ—°νžˆ 도메인 객체에 ν•΄λ‹Ήλ˜κΈ° λ•Œλ¬Έμ— λͺ…μ„Έμ—μ„œ 리포지토리λ₯Ό λ‹€λ£¨λŠ” 것은 λΆ€μ μ ˆν•  수 μžˆλ‹€.
이런 경우 λͺ…μ„Έμ—μ„œ 리포지토리λ₯Ό 톡해 직접 데이터λ₯Ό μ‘°νšŒν•˜λŠ” λŒ€μ‹  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€μ—μ„œ 검증에 ν•„μš”ν•œ νŠΉν™”λœ 데이터 μ»¬λ ‰μ…˜ 객체인 일급 μ»¬λ ‰μ…˜ (first-class collection)에 정보λ₯Ό μ£Όμž…ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 방법을 선택할 수 μžˆλ‹€.
Β