Blog · 6 juli 2023
Interactief een domeinmodel implementeren
Een verslag van onze hands-on lab op Domain-Driven Design Europe 2023

Hands-on labs zijn voor mij altijd een hoogtepunt geweest op conferenties. Ze bieden deelnemers een unieke kans om nieuwe Domain-Driven Design-concepten te leren en ermee aan de slag te gaan, iets waar ze in hun dagelijkse job soms niet de kans toe krijgen om diep in te duiken.
Op 8 juni gaven Michel Grootjans en ik op DDDEU23 de aftrap van onze hands-on lab met een boeiende codeerworkshop getiteld: "Interactively Implementing a Domain Model".
Toen we de zaal binnenkwamen, waren we blij verrast door een volle zaal van 72 enthousiaste deelnemers. We moedigden hen aan om paren te vormen op basis van hun favoriete programmeertaal, gaande van Java, C#, JavaScript, TypeScript, PHP en Python tot F#.
Pairen zorgde niet alleen voor een collaboratieve leeromgeving, maar bevorderde ook de kennisuitwisseling tot buiten de workshop.
Na een korte inleiding gingen de deelnemers aan de slag met de oefeningen van domainmodelling.dev, een verzonnen maar realistische uitdaging die Michel en ik hebben gemaakt.
De hoofduitdaging van de hands-on lab was om een domeinmodel te implementeren voor het berekenen van de prijs in een recyclagepark. Elke keer dat je afval afzet in het recyclagepark, wordt de hoeveelheid afval die je hebt afgezet gewogen. Afhankelijk van het soort afval moet je een bepaald bedrag betalen. Uiteraard zijn er nog meer regels die dit domein interessanter maken.
Doelen en resultaten
Met deze workshop hadden we twee doelen:
-
We wilden dat de deelnemers plezier hadden
-
We wilden dat ze waardevolle inzichten opdeden in de fijne kneepjes van domeinmodelleren in code
Het was interessant om naar de uiteenlopende standpunten en ervaringen van de deelnemers te luisteren. Om te beginnen: omdat de meeste paren verschillende programmeertalen gebruikten, werden sommige dingen op een andere manier opgelost. Sommigen gebruikten het typesysteem meer, anderen wat minder. Sommigen kozen voor een heel functionele stijl van oplossing.
Het andere grote verschil was dat mensen verschillende niveaus van ervaring hadden. Sommigen kwamen voor het eerst in aanraking met domeinmodelleren en concentreerden zich op de basis, terwijl anderen, met meer ervaring, dieper in de uitdaging doken. Sommige mensen die echt nieuw waren, focusten bijvoorbeeld niet zo sterk op de ubiquitous language of op tactische patronen, maar na wat discussie met ons, of door de richtvragen uit de online oefening te gebruiken, merkten ze dat de UL echt belangrijk is. En dat beginnen met enkele eenvoudige value objects een goede manier was om hun eerste stappen te modelleren.
Meer ervaren mensen daarentegen gingen wat sneller door de eerste oefeningen en begonnen pas naar een domeinmodel te refactoren wanneer ze het gevoel hadden dat ze het grotere domein beter begrepen.
Toen de workshop ten einde liep, hielden we een korte feedbackronde. De deelnemers vertelden hoe ze van de hands-on ervaring genoten hadden en stelden verschillende vragen die tot nadenken stemden.
Een vraag die vaak opduikt, is dat mensen de oplossing willen zien, en dat is iets wat Michel en ik liever niet geven, omdat er geen enkele juiste oplossing is en we zeker niet beweren de beste oplossing in handen te hebben. Elke programmeertaal heeft andere stijlen, en elke keer dat je dit oplost, kom je tot andere inzichten.
De beste oplossing is iets denkbeeldigs dat van heel veel context afhangt. De denkprocessen en discussies tijdens de implementatie zijn veel belangrijker. Daarom geven we geen oplossing.
We proberen wel wat richting te geven voor de oplossing. In deze live coding-sessie die ik op KanDDDinsky gaf, zie je bijvoorbeeld mijn denkproces bij het refactoren van het recyclageparkdomein in deze video. Daarnaast kan je ook onze videotutorial over domeinmodelleren bekijken, waarin je ziet hoe we aan een gelijkaardig probleem werkten.
Al bij al zijn twee uur vaak te weinig om meerdere leerdoelen grondig te behandelen. Daarom gaven we voorrang aan praktische kennis van domeinmodelleren boven theoretische uitleg.
We wilden dat ze iets meenamen dat ze snel in hun dagelijkse taken konden toepassen. Maar ons uiteindelijke doel was om de deelnemers te inspireren om hun vaardigheden in domeinmodelleren verder te verkennen en aan te scherpen.