Innovatie & Strategie

Dit is een bijdrage van Itility
Software-ontwikkeling
Design patterns blijven onmisbaar

Software design patterns blijven onmisbaar

De 23 design patterns van de ‘gang of four’ behoren tot de standaard tool voor elke software engineer. Wat maakt ze zo bruikbaar?

7 april 2020
Door: Itility, partner

De 23 design patterns van de ‘gang of four’ behoren tot de standaard tool voor elke software engineer. Wat maakt ze zo bruikbaar?

Het is een grondbeginsel van elke software-opleiding: design patterns. Toch blijft het verleidelijk om eenmaal uit de schoolbanken het wiel zelf uit te vinden. Zonde, want goed gebruik van ‘ontwerppatronen’ maken je werk efficiënter. 

Als software-engineer pronken de 23 design patterns van de Gang of Four (naar de vier bedenkers) natuurlijk boven je bureau. Kort door de bocht is een design pattern, of ontwerppatroon, een bewezen recept om een veelvoorkomend probleem op te lossen. En jij bent de chef. Want werk je volgens het recept, dan geeft het een sterke basis voor een goed werkend, smakelijk resultaat. Wil je aan het patroon wat peper en zout toevoegen? Dan kan dat, zij het met mate. Het is dus geen kant-en-klaar sjabloon in code, maar een manier om structuur aan te brengen in de architectuur van je software, het bouwen van een functie, of manier van werken. 

Drie typen patronen
Als je de design patterns eenmaal kent, dan zie je ze overal. De originele design patterns zijn te verdelen in drie hoofdsmaken: creatie-, structurele- en gedragspatronen.

Bij creatiepatronen draait het om het creëren van objecten. Een structuurpatroon legt expliciet vast hoe meerdere objecten samen een grotere structuur vormen en een gedragspatroon stroomlijnt processen wanneer er een bepaald soort gedrag plaatsvindt. Nadien zijn nieuwe types design patterns toegevoegd, bijvoorbeeld om de complexiteit te omvatten van parallelle processen of applicaties op enterpriseniveau. Van elke originele patroon is er hieronder één uitgewerkt in een herkenbare situatie.

Leaseauto kiezen met een creatiepatroon
Bij het kiezen van een nieuwe leaseauto, merk je dat je te maken krijgt met een bouwpatroon. In dit geval bestaat het patroon uit vier variabelen: de klant (jijzelf), de leasemaatschappij, de autobouwer en bloemist. Bij de leasemaatschappij bestel je een Audi met diverse opties: cruisecontrol, lichtmetalen velgen en rijbaan-assist. En de kleur van de auto moet rood zijn, uiteraard. De leasemaatschappij geeft het door aan Audi die de auto bouwt en volgens specificaties aflevert. Als verrassing bestelt de leasemaatschappij ook een bloemetje met gouden strik bij de bloemist.   

Drie weken later pronkt een gloednieuwe Audi met een bloemetje op de oprit. Als het bouwpatroon wordt gebruikt bij de leasemaatschappij, dan zou het net zo eenvoudig moeten zijn om dezelfde specificaties bij een andere autofabriek te bestellen. Mercedes biedt dezelfde manier om de opties te kiezen, hoewel het een compleet ander bedrijf is. Dankzij het bouwpatroon zijn de leasemaatschappij, autobouwer en bloemist uitwisselbaar. Het patroon blijft zijn werk doen, dus ook als je stiekem over een donkergrijze Mercedes fantaseert.

Builder pattern_lease car

Telefoon opladen met een structuurpatroon
We kennen allemaal dat moment dat je telefoon leeg is en je geen oplader bij de hand hebt. Je collega schiet te hulp. Zodra je de oplader van je collega in je telefoon steekt, heb je te maken met een adapterpatroon. De adapter vormt de Europese 220 volt-uitgang die de elektriciteit levert naar een usb-verbinding met vijf volt.

Thuis gebruik je je draadloze oplader. Dat is een compleet andere aansluiting, maar net als bij de oplader zet deze het vermogen op precies de juiste manier om. Zo kun je na een uurtje de lader weer met een gerust hart teruggeven aan je collega.

Hotels boeken met een gedragspatroon
Je hebt vast weleens een hotel bekeken via het bekende blauwe boekingsplatform. Onder je favoriete hotel lonkt een rode balk: al vier keer geboekt dit uur. Hier is een uitgekookt design pattern actief: het waarnemerspatroon.

Website-elementen (waarnemer) zijn gelinkt aan de backend (onderwerp) van de boekingswebsite en tonen informatie afhankelijk van het onderwerp. Zodra er iets wijzigt in de status van een kamer of boeking, krijgen deze elementen een notificatie van het onderwerp en kunnen ervoor kiezen om hun informatie bij te werken. De backend weet continue of en wie er ergens een kamer heeft geboekt. Niet alleen voor jouw kamer, maar voor álle kamers, appartementen en villa’s. Zodra iemand anders boekt en het is dezelfde kamer als die jij hebt geboekt, dan geeft de backend aan jouw teller door dat de vijfde boeking binnen is. En dan kan jij natuurlijk niet achterblijven…

Wat design patterns opleveren
Design patterns brengen dus een uitwisselbare structuur. Maar welke voordelen levert dat nou op? Hieronder een selectie van de toegevoegde waarde die het ons biedt.

Betrouwbare code: Iedereen heeft zijn eigen manier van werken. Maar het doel is wel dat zodra iemand op ‘opslaan’ drukt, iemand anders weer verder kan. Design patterns zorgen door de 'bewezen' opzet voor betrouwbaarheid. En dat geldt niet alleen voor de code, maar ook over de manier hoe je documentatie en aantekeningen maakt in je project.

Nieuwe mensen snel productief: Als een project hard groeit in omvang, of iemand wisselt van functie, dan wil je productieve nieuwelingen. Zonder design patterns zou je iemand eerst de hele samenhang van de code, of manier van werken moeten uitleggen. Zie je de maanden en frustraties al voorbijvliegen? Gebruik je design patterns, dan kan je zeggen: de updates van dit dashboard maken gebruik van een waarnemerspatroon. De nieuweling weet nu meteen hoe met die functie om te gaan, of kan opzoeken hoe zo’n patroon werkt.

Eenvoudig objecten delen met andere frameworks en talen: Python, C#, Vue, React, R, we gebruiken steeds meer talen en frameworks door elkaar. Objecten bouwen en verwerken doen deze systemen allemaal op hun eigen manier. Een adapterpatroon helpt je om op een neutrale manier informatie uit een object in Python naar bijvoorbeeld een Vue-object om te vormen. Dat kan door de objecten in Python naar JSON te vertalen en de JSON in Vue om te zetten naar een Vue-object. Over JSON gesproken, een adapter maakt het ook makkelijk om legacy XML-code compatible te houden. Je schrijft hiervoor ‘simpelweg’ een adapter.

Nieuwe projecten sneller opgebouwd
Werken mensen met dezelfde skills aan veel projecten, dan ga je sneller leveren. Bij Itility werken de software-engineers verspreid over diverse klanten. Zij houden elkaar goed op de hoogte van wat ze maken. Door in hun projecten design patterns te gebruiken, kunnen ze efficiënt nieuwe functies en workflows uitwisselen als deze ook bruikbaar blijken voor een eigen project. Daarnaast hoef je het wiel niet opnieuw uit te vinden voor structuren die al bestaan in design patterns.

Beter samenwerken met andere specialisten
Oke, design patterns zorgen voor betrouwbare code, maakt nieuwelingen en nieuwe projecten productiever. Maar werkt het ook buiten de silo van software-engineers? En of. Ze hebben hun efficiëntie ook al bewezen in de nauwe samenwerking tussen DevOps-engineers en data scientists.

Een voorbeeld van onze notificaties: de software engineer maakt voor de data scientist een klasse beschikbaar dat het bouwpatroon implementeert. Zo hoeft de datawetenschapper zich niet druk te maken over hoe een notificatie precies wordt opgebouwd. Ze hoeven zich alleen maar te richten op de definities binnen het bouwpatroon en de informatie toevoegen die nodig is voor de notificatie. Op de achtergrond wordt automatisch de juiste informatie toegevoegd zoals de applicatienaam, links naar documentatie en netwerkdetails. 

Dankzij design patterns is er dus heel veel winst te halen. Een pattern kan zelfs nuttig zijn als je niks met code doet, maar bijvoorbeeld projecten uniform wil opleveren. Benieuwd naar meer basisprincipes over design patterns? Download dan de slides van onze training design patterns.

Reactie toevoegen