λλ©μΈ μ€μ¬ μ€κ³(Domain-Driven Design)μ΄λ?
λ¨μνκ² μ 리νμλ©΄ λλ©μΈ(λΉμ¦λμ€ λͺ©ν)μ μ€μ¬μΌλ‘ μκ² μͺΌκ°μ΄ μ€κ³(λλ λ¬Έμ ν΄κ²°)ν΄ λκ°λ λ°©λ²μ΄λ€.
νλ‘μ νΈ μ λͺ¨λκ°μ μμ‘΄μ±μ μ΅μννλ©° μμ§μ±μ μ΅λν νλ©΄μ λ§μ΄λ€...
μ²μ DDD μ λν κ°λ μ μ ν λλ λ무λλ λμ λ²μμ λν΄ν΄μ κ°λ μ μ΄ν΄νκΈ° μ΄λ €μ μλ€. κ°μ²΄μ§ν₯μ λν κ°λ μ μ λλ‘ μ΄ν΄νμ§ λͺ»νμκΈ° λλ¬ΈμΌκΉ.
κ°μ²΄ μ§ν₯μ λ 립μ μΈ κ°μ²΄(κ°μ²΄)λ€μ΄ μνΈμμ©μ ν΅ν΄ λ°μμν€λ μ΄λ²€νΈλ₯Ό λͺ©μ μΌλ‘ νλ€.
물건μ μ¬κΈ°μν΄(Buy Domain) λ§νΈμ λ€μ΄κ° Aμ¨λ κ·Έκ³³μμ μΌνκ³ μλ Bμ¨μκ² κ³μ°μ νλ€(Sell Domain)
μ μ£ΌμΈ C λ μ΄λ₯Ό κ΄λ¦¬(Manage Domain)νλ€.
λ²μ¨ μ¬κΈ°μλ§ 3κ° μ΄μμ λλ©μΈμ΄ λ°μνλ€.
μ°λ¦¬λ μ΄λ κ² λ°μν λλ©μΈλ€μ μλΉμ€ λ³λ‘ λΆλ¦¬ νλ κ²μ DDDλΌ λΆλ₯΄κΈ°λ‘ νλ€.
μ€λ‘ μΆμμ μ΄κ³ μ 맀νλ©° λν΄ν λ§μ΄ μλ μ μλ€. κ·Όλ° λ μκΈ΄κ² κ΄λ ¨λ κΈμ μ½λ€λ³΄λ©΄ μ΄κ² λ§λ€ ..γ γ
μ΄λ κ² μ΄λ €μ νμ΅λΉμ©λ ν¬κ³ , νλ‘μ νΈ μ§ν λ¨κ³μ κ΄κ³μμ΄ κ±°μ³μΌ ν κ³Όμ λ λ§μ DDDλ λ μ³μ κ²μΌκΉ?
'Implementing DDD'μ μ μ λ° λ²λ Όμ DDD λμ μ΄ νμνμ§ μμ κ²½μ°μ λν΄μλ λ€μκ³Ό κ°μ΄ λ§νκ³ μλ€.
λΉμ μ μ ν리μΌμ΄μ μ΄ μμ ν λ°μ΄ν° μ€μ¬(data-centric)μ΄λ©° μμν CRUD μ루μ μ μ λ§ μ λ§μμ, λͺ¨λ λμμ΄ κ°λ¨ν λ°μ΄ν°λ² μ΄μ€ 쿼리λ₯Ό ν΅ν΄ κΈ°λ³Έμ μΈ μμ±, μ½κΈ°, κ°±μ , μμ λ±μ μνν λΏμ΄λΌλ©΄ DDDκ° νμνμ§ μλ€. λΉμ μ νμ κ·Έμ μμ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈ νΈμ§κΈ°λ§ μμΌλ©΄ λλ€. ...... λΉμ μ΄ λ¨μν λ°μ΄ν°λ² μ΄μ€ κ°λ° λꡬλ₯Ό μ¬μ©ν΄ μ루μ μ λ§λ€ μ μλ€λ©΄, DDDμ νμ¬μ μκ°κ³Ό λμ λλΉνμ§ λ§λΌ.
1. 물건μ μ¬κΈ° μν΄ νμν μ 보λ₯Ό λ΄μ κ°μ²΄μ
2. κ³μ°μ νκΈ° μν μ 보λ₯Ό λ΄μ κ°μ²΄
3. κ΄λ¦¬λ₯Ό νκΈ° μν μ 보λ₯Ό λ΄μ κ°μ²΄
μ 3κ°μ Repository λ₯Ό λͺ¨λ ꡬννλ κ²μ΄ λ§μκΉ?
κ°μ²΄ κ° λ΄λΆ μνΈμμ©μ ν΅ν΄(κ±°λ₯΄κ³ κ±Έλ¬) κ³΅ν΅ μ§ν©μ μ°Ύμ Repositoryλ‘ λ¬Άμ¬μΌλ§ νλ€.
μ€λ νμ¬μμ μ§κ°μ§ κ°λ 무μν λ§μ λ°©λ² μ€ μ΅μ μ ν κ°μ§ 루νΈλ₯Ό μ°Ύλ λ€λΉκ²μ΄μ κ³Ό κ°μ΄ λ§μ΄λ€.
πλ μ½μ거리
π DDDμ§ν₯ λ§μ΄ν¬λ‘ μλΉμ€ λμμΈ
π νμν λ΄μ©λ§ μΆλ €μ DDD λΉμ₯ μ¨λ¨ΉκΈ°
π DDD ν΅μ¬λ§ λΉ λ₯΄κ² μ΄ν΄νκΈ°