Domain-Driven Design (DDD)

Mis see on?
Domain-Driven Design (DDD) on tarkvaraarenduse lähenemine, mis keskendub keerukate süsteemide loomisele, sidudes koodi tugevalt reaalse äriloogikaga. Eesmärk on, et tarkvara struktuur ja keel vastaksid täpselt päriselu äriprotsessidele.

Mis etapid seal on?

DDD ei ole lineaarne protsess, vaid jaguneb kaheks disainitasandiks:

1. Strateegiline disain (Strategic Design)

Suure pildi haldamine ja süsteemi osadeks jagamine:

2. Taktikaline disain (Tactical Design)

Koodi tasandi mustrid lahenduste elluviimiseks:


Kas sellel on alamvariante?

DDD-d kombineeritakse sageli järgmiste arhitektuurimustritega:

Arendusmudel joonisena

DDD Sibularhitektuur (Onion Architecture)
DDD Sibularhitektuur

Joonise selgitus: Kõige keskel on puhas äriloogika (Domain Model), mis ei sõltu ühestki andmebaasist ega tehnoloogiast. Sõltuvused liiguvad alati väljast sissepoole.

Tähtsaim omadus: Ühtne keel (Ubiquitous Language)

See on DDD kõige kriitilisem osa. Kui koodis kasutatavad terminid erinevad sellest, mida äriinimesed räägivad, tekivad vead.

Näide: Kui logistikajuht ütleb "Kaup on teele pandud", siis koodis peab olema meetod shipment.dispatch(), mitte lihtsalt andmebaasi välja muutmine update status = 3.

Head ja Vead

Omadus Head (Plussid) Vead (Miinused)
Äriline täpsus Tarkvara käitub täpselt nii nagu äri vajab. Nõuab arendajatelt süvenemist äridetailidesse (mitte ainult koodi).
Hooldatavus Kood on modulaarne ja muudatused on ohutumad. Algne arendus on aeglasem suurema hulga failide ja kihtide tõttu.
Kasutusala Ideaalne pikaajaliste ja keeruliste projektide jaoks. Liiga keeruline (over-engineering) lihtsate veebilehtede jaoks.
Loe Martin Fowleri DDD kokkuvõtet

Kasutatud allikad ja lisalugemist

Selle mudeli süvitsi õppimiseks soovitame järgmisi materjale:

Eric Evansi "Domain Language" (DDD kodu) Microsofti juhend: CQRS ja DDD Martin Fowleri artiklid DDD-st