SUPERHERO VS.SUPERVILLAIN

SUPERHERO VS. SUPERVILLAIN
With great power comes great responsibillity

Design patterns vs.
anti-patterns in code




Design patterns zijn sexy. Maar elke superheld heeft zijn tegenpool. Om het Peter Parker principle er even bij te halen: ”With great power comes great responsibility”. Met power wordt natuurlijk het design pattern zelf bedoeld. De responsibility is ervoor te zorgen dat je de patterns op de juiste manier implementeert. Het grootste negatieve gevolg van het verkeerd implementeren van een design patterns is namelijk het introduceren van een anti-pattern. And thus, a supervillain was born.

Wat is een anti-pattern?

De beste definitie van een ‘anti-pattern’ is toch wel die van de schrijvers van het boek Design patterns (1). Zij beweren dat je een anti-pattern het beste kan onderscheiden van iets wat simpelweg een slechte gewoonte is, door te kijken of het aan twee kenmerken voldoet:

1. Het is een generiek te gebruiken proces, structuur, patroon of actie die, hoewel het in eerste instantie een goede oplossing leek voor een probleem, meer slechte gevolgen heeft dan goede.

2. Er bestaat een andere oplossing die generiek te gebruiken is, die gedocumenteerd is en waarvan is bewezen dat hij effectief is.

Het is belangrijk dat anti-patterns worden weggewerkt. Omdat ze ervoor zorgen dat je code slecht onderhoudbaar wordt en er regelmatig problemen in optreden die vaak niet eenvoudig op te lossen zijn. Sowieso gaat het je tijd kosten. En als je die tijd er niet voor neemt, heb je vaak niet eens het anti-pattern zelf uit je software gehaald, maar slechts aan symptoombestrijding gedaan. Het daadwerkelijk verwijderen van een hardnekkig anti-pattern moet je dan ook zien als een investering. Een anti-pattern is dus altijd een gevolg. Sterker nog: het is altijd het gevolg van een fout die eerder in het proces is gemaakt en dient te worden opgelost.

(1) Bron: Gamma, E., Helm, R., Johnson, R., Vlissides, J., & Booch, G. (1994). Design Patterns: Elements of Reusable Object-Oriented Software (1ste editie).

Hoe herken je een anti-pattern?

De negatieve gevolgen van het implementeren van anti-patterns verschilt enorm per anti-pattern. Sterker nog, de term anti-pattern is dynamisch. Hoewel er veel anti-patterns geïdentificeerd zijn; zijn er nog enorm veel niet gedocumenteerd. Dit kan het flink lastig maken om een anti-pattern te herkennen. Maar hoe weet je dan dat je er mee te maken hebt?

Gelukkig is er iets wat eigenlijk alle anti-patterns delen. De problemen die ze veroorzaken uiten zich namelijk vooral in de frequentie ervan en grootte van onderhoudswerkzaamheden die ze veroorzaken.

Kom je vaak hetzelfde probleem tegen en moet je die op meerdere plekken op dezelfde manier oplossen? Kost dat vaak veel tijd? Moet je bij kleine aanpassingen hele structuren aanpassen om het werkend te krijgen (groot onderhoud voor een klein probleem)? De kans is groot dat je (onbewust) bezig bent met symptoombestrijding van een dieper verstopt anti-pattern.

Solve it

Nu je weet hoe je een anti-pattern herkent, namelijk wanneer je veelal bezig bent met symptoombestrijding, kan je op zoek naar de veroorzaker. Let goed op welke problemen je tegenkomt en hoe vaak je daar eenzelfde probleem bij oplost. Als je eenmaal weet dat je met een anti-pattern te maken hebt, kan je hem gaan oplossen. Dat scheelt veel gedoe in tijd, frustratie en onderhoud in de toekomst.

Niet onbelangrijk: overtuig ook je collega’s en management dat dit belangrijk is om te doen. Omdat het zich uiteindelijk uit in winst (minder onderhoud = minder kosten). Heb ook de ballen om, als je zelf een anti-pattern hebt geïntroduceerd, dat recht te zetten.

Hoe je dat doet is simpel. De oplossing van het probleem zit hem al in de definitie van dat probleem, namelijk: ‘Er bestaat een andere oplossing die generiek te gebruiken is, die gedocumenteerd is en waarvan is bewezen dat hij effectief is’. Design patterns dus. Maar dan wèl op de juiste manier geïmplementeerd. Begin maar vast met refactoren.

Anti-patterns voorkomen

Elk design pattern is in essentie bedoeld om een vaker voorkomend probleem op een generieke, robuuste, solide manier op te lossen. Ze zijn clean, lean, schaalbaar en makkelijk te implementeren.

De reden dat er anti-patterns ontstaan is vaak dat we de design patterns op een verkeerde manier naar onze eigen situatie vertalen, en daarbij één of meer solid principes uit het oog verliezen. We maken er maatwerk van en daarmee geven we er vaak onze eigen (verkeerde) draai aan. Dat is het begin van je probleem, maar ook tegelijk het punt waar je toekomstige anti-patterns mee kunt voorkomen.

Zorg er dus voor dat je de solid principles uit je hoofd kent. Ze als geen ander weet te hanteren en ze toe te passen bij het implementeren van een design pattern. Zorg ervoor dat je de gedachte achter een design pattern begrijpt voordat je ‘m implementeert. Zodat je geen onnodige fouten maakt, die later bij je komen spoken in de vorm van bugs en veelvuldig onderhoud.

En last but not least: gebeurt het toch een keer, leer er dan van! Kijk waar je de mist in bent gegaan en corrigeer het. Door deze ervaringen leer je problemen met anti-patterns in de toekomst voorkomen.

Kennis van design patterns en het implementeren van clean code lossen eigenlijk al je problemen op. Je kunt anti-patterns die zich voordoen makkelijker en sneller oplossen. Daarnaast kan je ze er makkelijker mee voorkomen. Verdiep je vooral goed in design patterns die er zijn en leer wanneer je welk pattern gebruikt. Kortom, voorkom een boel gedoen en wordt gewoon een pattern-pro.
Design patterns vs. anti-patterns
Design patterns vs. anti-patterns
Wat we
voor jou kunnen
doen?
Onze .NET oplossingen laten zich over het algemeen niet in een paar regels uitleggen.

Wil je weten wat we voor jouw organisatie kunnen betekenen? Laat dan je gegevens achter en omschrijf je vraag. We nemen snel contact met je op!

Je kunt ons natuurlijk ook gewoon bellen, mailen of Whatsappen.
Whatsapp
Whatsapp
met ons
Sycade maakt gebruik van cookies. Om je gebruikerservaring op onze website te verbeteren en om ons websiteverkeer te analyseren. Wil je een optimaal werkende website? Klik dan op ‘Accepteren’. Bekijk voor meer informatie onze privacyverklaring.