Anti-pattern
In informatica, gli anti-patterns (o antipatterns) sono dei design patterns usati durante il processo di sviluppo del software, che pur essendo lecitamente utilizzabili, si rivelano successivamente inadatti o controproduttivi nella pratica. Il termine fu coniato nel 1995 da Andrew Koenig, ispirato dal libro Design Patterns: Elementi per il riuso di software ad oggetti scritto dalla Gang of Four (la banda dei quattro), i quali svilupparono il concetto di patterns nel campo del software.
Secondo l'autore, devono presentarsi almeno due elementi chiave per poter distinguere un anti-pattern da un semplice errore logico o cattiva pratica:
- Qualche schema ricorrente di azioni, processi o strutture che inizialmente appaiono essere di beneficio, ma successivamente producono più problemi che benefici.
- Esiste una soluzione alternativa che è chiaramente documentata, collaudata nella pratica e ripetibile.
Molti anti-patterns sono poco più che errori, problemi irrisolvibili o cattive pratiche da evitare quando possibile. A volte chiamati "pitfalls" (tranelli) o dark patterns (patterns oscuri), si riferiscono a classi di soluzioni di problemi reinventate in modo sbagliato.
Per descrivere in modo formale errori che tendono a ripetersi, si può individuare la forza con la quale questi si ripeteno, e imparare come altre persone hanno rimediato a questi cattivi patterns.
Gli anti-pattern più comuni
(Nota: il nome in inglese è stato lasciato in quanto è quello con cui i pattern, e gli anti-pattern, sono conosciuti nella lingua italiana)
- Azione a distanza - action at a distance
- Ancora da nave - boat anchor
- Attesa a vuoto - busy spin
- Mancato caching - caching failure
- Inerzia del codice - code momentum
- Carica e spara - accumulate and fire
- Codice procedurale - procedural code
- Codice puzzolente - code smell
- Colata di lava - lava flow
- Coltellino svizzero - Swiss Army Knife (anche: Kitchen Sink)
- Complessità involontaria - accidental complexity
- Controllo di tipo invece che di appartenenza - checking type instead of membership
- Corpi tiepidi - warm bodies
- Design by committee
- Inferno delle DLL - DLL hell
- Interblocco ricontrollato - double-checked locking
- Enorme palla di fango - big ball of mud
- Anomalia della sottoclasse vuota - empty subclass failure
- Fede cieca - blind faith
- Sbagliato di uno - fencepost (o anche off-by-one) error
- Fumo e specchi - smoke and mirrors
- Gestione a fungo- mushroom management
- Input ad-hoc - input kludge
- Interfaccia che ingrassa - interface bloat
- In mano al fornitore - vendor lock-in
- Invecchiamento rapido - continuous obsolescence
- Inversione di astrazione - abstraction inversion
- numero magico - magic number
- Oggetto Dio - God object
- Ottimizzazione prematura - premature optimization
- Paralisi da analisi - analysis paralysis
- Poltergeist - poltergeist
- Priorità alle estensioni - creeping featurism
- Problema dello yo-yo - yo-yo problem
- Programmazione copia e incolla - copy and paste programming
- Programmazione cargo cult - cargo cult programming
- Pulsante magico - magic pushbutton
- Punto di vista ambiguo - ambiguous viewpoint
- Reinventare la ruota - reinventing the wheel
- Reinventare la ruota quadrata - Reinventing the Square Wheel
- Software che ingrassa - software bloat
- Spaghetti code - spaghetti code
- Pila di piatti - stovepipe system
- Valori cablati - hard code
- Valori esterni - soft code
- Vicolo cieco - Dead End
- Una tabella al giorno - A table per day
Bibliografia
- William J. Brown, Raphael C. Malveau, Hays W. McCormick III, e Thomas J. Mowbray. 1998. AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. John Wiley & Sons ISBN 0-471-19713-0.