# Antipatroon

Een antipatroon (Engels: anti-pattern) is een beschrijving van een vaak voorkomend, architectonisch patroon dat is bedoeld om een specifiek probleem te verhelpen, maar achteraf een ineffectieve oplossing blijkt. In product- of systeemontwerpen uiten antipatronen zich in hoge frequentie of grote hoeveelheid onderhoudswerkzaamheden.
Het idee van een antipatroon is ontwikkeld door architect Christopher Alexander die een 'patroontaal' omschreef voor het plannen van steden en gebouwen in steden. Het antipatroon is later in de informatica gebruikt als tegenhanger van het ontwerppatroon. Binnen de informatica bestaat een grote verzameling ontwerppatronen, ontwikkeld vanuit de eerste verzameling opgesteld door de Gang of Four. Gaandeweg ontstond ook het inzicht dat er bepaalde patronen zijn die geen goed idee zijn, die wel steeds terugkomen. Deze patronen worden op een soortgelijke wijze verzameld als hun "positieve" tegenhangers.

## Definitie en gebruik van antipatronen

Volgens de auteurs van Design Patterns moeten er minimaal twee sleutelelementen aanwezig zijn om onderscheid te kunnen maken tussen een werkelijk antipatroon of een slechte gewoonte, slechte praktijken of slecht idee:
* Een vaakgebruikt process, structuur of patroon van handelingen dat oorspronkelijk een effectief systeem lijkt, maar op termijn meer negatieve consequenties heeft.
* Een goed gedocumenteerde, herhaalbare en bewezen oplossing bestaat al elders
Antipatronen zijn nuttig om handelingen vroegtijdig te herkennen en problemen op termijn te voorkomen. Hiervoor bevat een ideale beschrijving de volgende elementen:
* De naam van het antipatroon
* Het herkenbare probleem dat het antipatroon meent op te lossen
* De kenmerken van het antipatroon
* Mogelijke oorsprong van denkfout zodat deze in de toekomst vermeden kunnen worden
* Situaties waarin het probleem geen antipatroon is, om de relevantie te beoordelen
* De gevolgen, om de ernst te beoordelen
* Een suggestie voor een gestandaardiseerde oplossing om huidige schade te herstellen of toekomstige schade te voorkomen.

## Onderkende antipatronen

Net als ontwerppatronen worden antipatronen meestal ingedeeld naar categorie.

### Sociaal en bedrijfsvoeringoperations

Organisatorisch
* Analyseverlamming: er wordt te diep over een probleemsituatie nagedacht, waardoor een project nooit uitgevoerd gaat worden.
* Bicycle shed: triviale problemen krijgen ongefundeerd gewicht
* Bleeding edge (afgeleid van cutting edge): extra kosten, slechte performance of vertraagde oplevering omdat er gebruik wordt gemaakt van de nieuwste technologiën en tools waar nog allerlei (onvoorziene) fouten in zitten.
* Micromanagement: ineffectiviteit ten gevolge van het buitensporig observeren, toezicht of andere directe betrokkenheid van managers.

### Software engineering
#### Ontwerpantipatronen

* Abstractieinversie: een raakvlak (facet) exporteert benodigde geïmplementeerde functies niet, dus de gebruiker bouwt ze inefficiënt opnieuw boven de geëxponeerde functies. Niet: bouw van eenvoudige functies op basis van complexe functies, wat vaak wenselijk is.
* De Godklasse: een klasse die te veel weet en te veel doet, er is geen sprake meer van een klasse die één taak uitvoert, maar hij doet allerlei verschillende taken tegelijk. Dit zorgt vaak voor veel regels code en een ondoorzichtige structuur, waardoor testen moeilijker wordt.

#### Programmeerantipatronen

* Spaghetticode - code waarvan de logische paden net zo onnavolgbaar zijn als een bord spaghetti.
* Alexander, Christopher, A Pattern Language, Oxford: Oxford University Press, 1977