Kitchen sink
# Kitchen sink

In informatica, l'espressione kitchen sink (letteralmente, "lavello della cucina"), noto anche come swiss army knife ("coltellino svizzero"), denota un anti-pattern che ricorre frequentemente nella progettazione e lo sviluppo di programmi per calcolatore.

Un kitchen sink è un'interfaccia eccessivamente complessa, contenente un numero di operazioni eccessivo e molto eterogeneo. Le principali conseguenze di questo anti-pattern, tutte derivate dalla complessità, sono la difficoltà di utilizzo, manutenzione, debugging e documentazione. Esempi di interfacce eccessivamente complesse sono comuni soprattutto tra i programmi commerciali.

Generalmente si risolve o si minimizza questo problema in diversi modi:

* dividendo l'interfaccia in altre interfacce più semplici, ognuna con un compito specifico.
* se non si può dividerla, creando dei profili di utilizzo, cioè dei sottoinsiemi di operazioni dell'interfaccia, limitati da convenzioni e condizioni da soddisfare.
* se nemmeno i profili sono applicabili, usando politiche di utilizzo in ambito generic programming.

L'espressione si richiama alla frase inglese «everything but the kitchen sink», usata nel senso ironico di "una quantità di cose per la maggior parte inutili"; in italiano si potrebbe rendere con "[si è portato dietro] tutto tranne il lavello della cucina".

