Vad är Domändriven design? 1
Domändriven design är utvecklare och domänexperter som arbetar tillsammans för att skapa mjukvara som är både begriplig och möjlig att underhålla. ett sätt att fånga och sprida kunskap genom delade modeller och källkod som är såväl lättläst som förändringstålig. att gradvis skapa ett språk som delas mellan utvecklare och domänexperter. en uppsättning mönster och principer som vägleder dig när du designar mjukvara. till stor hjälp att fokusera din arbetsinsats. Domändriven design, eller DDD, bistår dig att förstå var i ditt system sofistikerad design verkligen lönar sig, och var bra nog, är bra nog. 2
Hur kan DDD hjälpa mig? Som produktägare gillar jag att domändriven design hjälper oss möta verksamhetens utmaningar och möjligheter. Som agil utvecklare gillar jag att domändriven design fokuserar på samarbete och hög designkvalitet för att nå sina mål. Som domänexpert uppskattar jag att snabbt kunna fånga upp och korrigera missförstånd kring domänen. Som utvecklingschef gillar jag hur domändriven design hjälper oss dokumentera och sprida kunskap så att den delas av mer än en medarbetare. 3
När vi arbetar med domändriven design bygger vi gradvis upp ett allestädes närvarande språk. Vi använder detta språk i allt vi gör, så väl källkod som kravdokument och samtal mellan utvecklare och domänexperter. 4
Ordlista Domän (Domain) Domänen är vårt verksamhetsområde eller intresseområde. Exempel på domäner är containerfrakt, aktiehandel och DNA-sekvensering. Modell (Model) En modell är ett system av abstraktioner som representerar utvalda aspekter av domänen. Vi använder modellen för att lösa specifika problem relaterade till den domän modellen beskriver. Modellen är implementerad i mjukvarans källkod. Allestädes närvarande språk (Ubiquitous Language) Ett språk strukturerat runt domänmodellen, som används av alla teammedlemmar. Det används av såväl utvecklare som domänexperter när de samarbetar i mjukvaruprojektet. Även källkoden uttrycks i språket. Det är gemensamt och allestädes närvarande. Kontextavgränsning (Bounded Context) Modellen existerar i en kontext och skyddas av en avgränsning. Vi kartlägger hur olika kontext och deras modeller interagerar, i syfte att undvika modellkorruption och ta medvetna beslut kring integration. Byggstenar (Building Blocks) Domändriven design definierar ett antal taktiska designmönster, eller byggstenar, som hjälper oss att karaktärisera de olika delarna av domänmodellen. Byggstenarna hjälper oss att förtydliga ansvarsområden och begränsa komplexiteten i koden. Exempel på byggstenar är entitet, värdeobjekt och aggregat. 5
-Alltså, en faktura ska alltid specificera totalen... - Ah, jag förstår. Så om vi uppdaterar modellen så här? När vi utövar domändriven design skapar utvecklare och domänexperter modeller tillsammans med hjälp av enkla verktyg som blädderblock och witheboardtavlor. En viktig del är att också utforska problemet i källkod som använder det allestädes närvarande språket. 6
Tre vanliga frågor om domändriven design Fråga Är domänmodellen samma sak som de objekt vi sparar i databasen? Måste vi modellera vår hela affärsverksamhet i källkod? Det verkar svårt. Vi har en stor, komplicerad och gammal kodbas, hur kan vi använda DDD? Svar Den är mer än så. Domänmodellen är ett verktyg för att lösa problem, en reflektion av vår förståelse av domänen. Modellen representeras i källkod. En del, eller hela, domänmodellen kan komma att sparas i en databas men det är inte dess huvudfokus eller ett krav. Som tur är behöver du inte göra det! Domänmodell skapas för att hjälpa oss lösa specifika uppgifter inom domänen. Den innehåller bara det som behövs för att lösa just de uppgifter den är designad för att lösa. I en stökig kodbas baserad på otydliga, eller inga, modeller är det svårt att utföra sofistikerad design. Vi kan använda de strategiska delarna av DDD för att skapa förståelse för hur vår situation ser ut och hitta sätt för hur vi kan bedriva effektiv nyutveckling i närheten av existerande kod utan att kasta bort all funktionalitet som redan finns. 7
Citerus AB Barnhusgatan 16 111 23 Stockholm SWEDEN Developing people and software +46 (0)8-562 95 300 info@citerus.se www.citerus.se/ddd 8