Anti-pattern

Da Wikipedia, l'enciclopedia libera.

In informatica, gli anti-pattern (o antipattern) sono dei design pattern 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 pattern 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-pattern sono poco più che errori, problemi irrisolvibili o cattive pratiche da evitare quando possibile. A volte chiamati "pitfalls" (tranelli) o dark pattern (pattern 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 ripetono, e imparare come altre persone hanno rimediato a questi cattivi pattern.

Gli anti-pattern più comuni[modifica | modifica wikitesto]

(Nota: il nome in inglese è stato lasciato in quanto è quello con cui i pattern, e gli anti-pattern, sono conosciuti nella lingua italiana)


  • Ancora da nave - boat anchor
  • Anomalia della sottoclasse vuota - empty subclass failure
  • Aspetta e Spera - Wait and Hope
  • Attesa a vuoto - busy spin
  • Azione a distanza - action at a distance* Mancato caching - caching failure
  • Carica e spara - accumulate and fire
  • Codice procedurale - procedural code
  • Codice puzzolente - code smell
  • Colata di lava - lava flow
  • Complessità involontaria - accidental complexity
  • Controllo di tipo invece che di appartenenza - checking type instead of membership
  • Corpi tiepidi - warm bodies
  • Design by committee
  • Enorme palla di fango - big ball of mud
  • Fede cieca - blind faith
  • Fumo e specchi - smoke and mirrors
  • Gestione a fungo- mushroom management
  • Inerzia del codice - code momentum
  • Inferno delle DLL - DLL hell
  • In mano al fornitore (informatica)|In mano al fornitore - vendor lock-in
  • Input ad-hoc - input kludge
  • Interblocco ricontrollato - double-checked locking
  • Interfaccia che ingrassa - interface bloat
  • Invecchiamento rapido - continuous obsolescence
  • Inversione di astrazione - abstraction inversion
  • Kitchen sink
  • Numero magico (informatica)|numero magico - magic number
  • Oggetto Dio - God object
  • Ottimizzazione prematura - premature optimization
  • Paralisi da analisi - analysis paralysis
  • Pila di piatti - stovepipe system
  • Poltergeist
  • Priorità alle estensioni - creeping featurism
  • Problema dello yo-yo - yo-yo problem
  • Programmazione cargo cult - cargo cult programming
  • Programmazione copia e incolla - copy and paste 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
  • Sbagliato di uno - fencepost (o anche off-by-one) error
  • Software che ingrassa - software bloat
  • Spaghetti code - spaghetti code
  • Una tabella al giorno - A table per day
  • Valori cablati - hard code
  • Valori esterni - soft code
  • Vicolo cieco - Dead End

Bibliografia[modifica | modifica wikitesto]

  • 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.

Collegamenti esterni[modifica | modifica wikitesto]