CHAP02 - DDD-START/ONLINE-STUDY GitHub Wiki
μν€ν μ²
μννΈμ¨μ΄ μν€ν
μ² μλ 4κ°μ§ μμ(κ³μΈ΅)μ΄ μμ΅λλ€. (νν, μμ©, λλ©μΈ, μΈνλΌ)
- νν μμ(Controler)λ http request μ responseλ₯Ό μ²λ¦¬νλ κ³μΈ΅μ λλ€.
- μμ© μμ(Service)λ λ΄λΆ λ‘μ§μ ꡬνν©λλ€. λ‘μ§μ μ§μ ꡬννκΈ°λ³΄λ¨ λλ©μΈμ λ‘μ§ κ΅¬νμ μμν©λλ€.
- λλ©μΈ μμ(Order, DTO, VO)μ λλ©μΈ λͺ¨λΈμ ꡬννκ³ , λλ©μΈκ³Ό κ΄λ ¨λ ν΅μ¬ λ‘μ§μ ꡬνν©λλ€.
- μΈνλΌμ€νΈλμ² μμ (jpa λ₯Ό μ¬μ©ν κ²½μ° Repository) μ ꡬν κΈ°μ μ λ€λ£Ήλλ€. λ€λ₯Έ ORM νλ μμν¬λ μΈλΆ μμ€ν κ³Ό μ°λμ μ§μν©λλ€.
(κ³μΈ΅κ΅¬μ‘°) μν€ν μ²
4κ°μ§ μμμ μ¬μ©ν λ 보νΈμ μΌλ‘ κ³μΈ΅κ΅¬μ‘° μν€ν μ²λ₯Ό μ¬μ©ν©λλ€. μ΄ μν€ν μ²μμλ μμκ³μΈ΅μ΄ νμκ³μΈ΅μ μμ‘΄ν΄μΌνμ§λ§ κ°λ° νΈμμ±μ μν΄ μ μ°νκ² μ μ©ν©λλ€.
νν
v
μμ©
v
λλ©μΈ
v
μΈνλΌμ€νΈλμ²
DIP(μμ‘΄ μμ μμΉ)
- μλλ κ³ μμ€ λͺ¨λ(μμ)μ΄ μ μμ€ λͺ¨λ(νμ)μ μμ‘΄νλ ꡬ쑰λ₯Ό λ°λλ‘ μ μμ€ λͺ¨λμ΄ κ³ μμ€ λͺ¨λμ μμ‘΄νκ² ν©λλ€ (μμ μ½λλ₯Ό λ΄μΌ μ΄ν΄κ° μ¬μ΄λ°, ν΅μ¬μ μΈν°νμ΄μ€ νμ©)
- μ΄λ κ² νλ μ΄μ λ μ μμ€ λͺ¨λμ λ³κ²½(ex: mybatis -> jpa λ³κ²½)μ΄ κ³ μμ€ λͺ¨λμ μ μμ€ λͺ¨λ ꡬνλΆμ κ΅μ²΄μ ν μ€νΈμμ νΈμμ±μ μ»κΈ° μν¨μ λλ€.
κ³ μμ€ μΈν°νμ΄μ€
μ implements ν΄μμ μμ€ λͺ¨λ
μ ꡬνν΄λκ³ ,κ³ μμ€ λͺ¨λ
ꡬνμμ μ μμ€ λͺ¨λμ κΈ°λ₯μκ³ μμ€ μΈν°νμ΄μ€
λ₯Ό ν΅ν΄μ μ¬μ©ν©λλ€.κ³ μμ€ μΈν°νμ΄μ€
μ μ΄λ¦μ λλ©μΈ(κ³ μμ€)κ³Ό μ°κ΄μ§μ΄ μμ±ν΄μΌν©λλ€. μ μμ€(μΈνλΌ)κ³Ό μ°κ΄μ§μ΄ μΈν°νμ΄μ€λͺ μ μ§μΌλ©΄ μ μμ€ λͺ¨λ ꡬνλΆ λ³κ²½μ μΈν°νμ΄μ€λͺ λ ν¨κ» λ³κ²½λμ΄μΌνλ μν©μ΄ λ°μν©λλ€. κ·ΈλΌ ν΄λΉ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ λλ©μΈ μμ λ΄λΆκΉμ§ μμ μ΄ νμνκ²λ©λλ€.
λλ©μΈ μμμ μ£Όμꡬμ±μμ
- Entity
κ³ μ μλ³μλ₯Ό κ°λ κ°μ²΄λ‘ μμ μ λΌμ΄ν μ¬μ΄ν΄μ κ°μ΅λλ€. (ex) μ£Όλ¬Έ, νμ, μν, νν)
κ΄μ μ§ν₯ DB ν μ΄λΈ
κ³Ό λμΌνλ€κ³ μ¬κΈΈ μ μλλ°.DB ν μ΄λΈ
μ λ°μ΄ν° μ§ν₯ μ΄κ³ , Entity λ κ°μ²΄ μ§ν₯μ λλ€. κ·ΈλμDB ν μ΄λΈ
μ λ°μ΄ν°λ§ κ°μ§κ³ μμ§λ§ Entity κ°μ²΄λ λ°μ΄ν° μ΄μΈμ μ¬λ¬ μ°Έμ‘° κ°μ²΄(μ£Όλ¬Έ μν°ν°λ λ°°μ‘μ§ μ 보 μ°Έμ‘°λ₯Ό κ°μ§)μ λλ©μΈ κΈ°λ₯μ ν¬ν¨ν μ μμ΅λλ€. - Value
μ§κ΄μ μΈ μ΄ν΄ν μ μλλ‘ λ°λ‘ μμ±ν μμ± κ°μ²΄
λλκ°μ κ°λ μ κ°μ κ²λ€μ νλμ λ¬Άμ κ°μ²΄
μ λλ€. case1) Money, OrderNo λ±μ μμνμ λ³μ νλλ§ μλ class λ₯Ό μμ±νμ¬ ν΄λΉ μμνμ λμ μ ν΄λΉ class μ°Έμ‘° case2) Order κ°μ²΄μμ, μ£Όλ¬Έμ μ 보(Orderer) κ΄λ ¨ λ μμ±λ§ λλμ΄μ Class λ₯Ό μλ‘ μμ±νκ³ ν΄λΉ class λ₯Ό μ°Έμ‘°
public class Orderer {
private String name;
private String email;
}
- Aggregate μμ€ν μ΄ μ»€μ§λ©΄μ μ μ 볡μ‘ν΄μ§λ Entity κ΄κ³λ₯Ό κ·Έλ£Ή λ¨μλ‘ κ΄λ¦¬νλ κ°λ μ λλ€. κ° κ·Έλ£Ήμλ ROOT Entity κ° μ‘΄μ¬νκ³ , λ€λ₯Έ κ·Έλ£Ήκ°μ μ κ·Όμ ROOT Entityλ₯Ό ν΅ν΄μλ§ μ κ·Όμ΄ κ°λ₯λλ‘ν©λλ€. (3μ₯μ λ μμΈνμ€λͺ λ¨)
- Repository Repository λ Aggregate λ¨μλ‘ λλ©μΈ κ°μ²΄λ₯Ό DB μ μ μ₯νκ³ μ‘°ννλ κΈ°λ₯μ λ΄λΆμ ꡬνν©λλ€. Repository μΈν°νμ΄μ€λ λλ©μΈ μμμ μνλλ‘ μ그리거νΈμ μ°κ΄μ§μ΄ μ΄λ¦μ μ§μ΅λλ€.
- Domain Service
νΉμ μν°ν°μ μνμ§ μλ λλ©μΈ λ‘μ§μ μ 곡ν©λλ€.
ν μΈκΈμ‘κ³μ°
μ μν, μΏ ν°, νμλ±κΈ, ꡬ맀κΈμ‘λ± λ€μν Entityμ Value λ₯Ό νμλ‘ νλλ°, μ΄λ¬ν λ‘μ§μ λλ©μΈ μλΉμ€μμ ꡬνν©λλ€.
μΈνλΌμ€νΈλμ²
λλ©μΈ κ°μ²΄μ μμμ± μ²λ¦¬, νΈλμμ , smtp, rest client λ± λ€λ₯Έμμμμ νμλ‘ νλ orm νλ μμν¬, ꡬνκΈ°μ , 보쑰기λ₯μ μ§μν©λλ€. λλ©μΈ μμμμ μμ±ν μΈν°νμ΄μ€λ₯Ό κ°μ§κ³ λ΄λΆ ꡬνμ νλκ² μμ€ν μ λ μ μ°νκ²ν©λλ€.
λͺ¨λ
λͺ¨λ μ€κ³(ν¨ν€μ§ ꡬ쑰 μ€κ³)μ μ λ΅μ μμ΅λλ€. μμ 4κ°μ§ μμλ³λ‘ ν¨ν€μ§ ꡬ쑰λ₯Ό λΆν ν μλ μκ³ , μ΅μλ¨μ μκ·Έλ¦¬κ±°νΈ λ¨μλ‘ λ¨Όμ ν¨ν€μ§ λΆν ν κ·Έ νμμ κ³μΈ΅μ λ°λΌ ν¨ν€μ§λ₯Ό λΆν ν μλ μμ΅λλ€.