12 April 2017

Bøger der er værd at (gen)læse: Domain Driven Design in PHP (af Carlos Buenosvinos et al.)

Opdatering marts 2018: Bogen blev færdigudgivet i februar 2018, og jeg vil forsøge at finde tid til at genlæse den i løbet af 2018, hvorefter der vil følge en revideret anmeldelse.

I dette indlæg begynder jeg en blogserie om bøger der er værd at læse - eller genlæse, hvis man har læst dem tidligere.

Blogserien begynder med bogen Domain Driven Design in PHP, der er skrevet af Carlos Buenosvinos et al. Bogen er udgivet på LeanPub og har - så vidt jeg husker - været undervejs siden 2015. Jeg har derfor læst bogen efterhånden som delkapitler blev færdiggjort, og jeg regner med at genlæse den i sin fulde længde, når den er helt færdigpubliceret.

Som bogens titel indikerer, så er bogen en guide til at mestre Domain-Driven Design i PHP, og igennem eksempler, implementeret i PHP, giver bogen en god indførsel til generelle DDD-principper (i særdeleshed »tactical design patterns«) som: Entities, Value Objects, Services, Domain Events, Aggregates, Factories, Repositories og Application Services.

Personligt synes jeg at hele DDD-tankegangen er ekstremt spændende, og forståelse for koncepter som »bounded context«, »strategic modeling« og »strategic design patterns« giver et godt udgangspunkt for at planlægning af applikationslogik og herunder særligt i forhold til at applikationen skal være let at tilpasse/ændre på et senere tidspunkt.

Ligesom konceptet i sig selv er spændende, så har jeg også fundet anvendelse i at have DDD-tilgangen i mit baghoved, selvom jeg på ingen måde er DDD-ekspert eller arbejder ud fra en DDD-approach i mine daglige projekter. I særdeleshed har følgende to hovedtræk ved Domain Driven Design hjulpet mig i min generelle arbejdsproces:

  • At projektets primære fokus lægges på kernen af domænet og dets logik
  • At der fokuseres på et stærkt samarbejde med domæneeksperter (typisk projekt stakeholders) så man sammen udvikler et domænesprog, der er med til at give udvikleren en bedre forståelse for domæneproblemer. Ligesom et fælles domænesprog også gør det lettere for begge parter at kommunikere omkring projektets specifikation (også ned i detaljer) pga. den fællesforståelse som sproget skaber frem for et typisk meget IT-præget sprog fra udvikler og et indforstået fagsprog for domæneeksperterne.

Bogen er anbefalelsesværdig hvis du a) ønsker at lære mere om DDD, og/eller b) ønsker at bringe konkrekrete implementeringer af domænebegreber som »value objects« og »services« ind i dit dag-til-dag arbejde, uden at du nødvendigvis vil købe fuldt ind på tanken om Domain Driven Design. Læs mere om, og køb, den her.