L'antipattern Swiss Army Knife (coltellino svizzero) è un problema architetturale, frutto del desiderio di creare un componente dai mille usi. Un'espressione tipica di chi sta per incorre in questo antipattern è: "Questo componente sarà estremamente versatile".
Contesto
La realizzazione di un componente è uno dei momenti più importanti nello sviluppo di un software. Rappresentano il cuore di qualsiasi prodotto e una loro corretta progettazione può condizionare il successo dell'applicazione.
I propositi da cui si parte sono sempre lodevoli, le buone intenzioni non mancano, e l'entusiasmo nel progettare l'architettura è sempre una motivazione insostituibile. Si vuole cercare di stupire a tutti i costi, provando a realizzare non un componente qualsiasi, ma "il componente per eccellenza".
In questo modo ci si "tuffa" in una progettazione minuziosa, con l'intenzione di non lasciare nulla al caso. Tuttavia, l'idea di realizzare un componente "tutto fare", spesso sfugge di mano, e i nobili intenti che sono alla base del progetto, diventano fonte di problemi, ed innescano quest'ennesimo antipattern.
Si incorre nello "Swiss Army Knife" quando un team di sviluppo (o l'architetto responsabile) vuole realizzare un componente che possa soddisfare tutti i possibili utilizzi ipotizzabili, col risultato, invece, di produrre un'interfaccia troppo complessa ed articolata, di difficile comprensione.
Cause
Le cause che sono alla base di questo antipattern sono:
Sintomi
I dettagli che permettono di individuare questo antipattern sono:
- Interfaccia articolata e complessa, di non facile comprensione
- Impossibilità di produrre un'adeguata documentazione
- Ore di lavoro superiori a quelle preventivate
Conseguenze
Le conseguenze a cui porta tale antipattern sono:
- Ritardi nella consegna
- Aumento indiscriminato delle funzionalità di un componente
- Specifiche difficili da comprendere
- Difficoltà nell'eseguire il testing
Soluzione
È possibile adottare degli accorgimenti per evitare quest'antipattern:
- Stabilire i corretti termini d'uso delle tecnologie disponibili
- Attenersi agli usi "realistici" del componente
- Dedicare un'adeguata fase d'analisi alle funzioni da implementare
- Analizzare e pianificare il comportamento dinamico delle applicazioni che adoperano le interfacce
Nota
È inevitabile riscontare una certa similitudine tra questo antipattern ed il Blob, ma è bene sottolineare che quest'ultimo si ottiene in fase d'implementazione del codice e non in fase architetturale. Se è vero che l'antipattern "Swiss Army Knife" è una delle cause alla base di un Blob, non necessariamente, però, le "classi di Dio" nascono da un'errata progettazione architetturale, ma spesso sono frutto di errate valutazioni (concezioni) dello sviluppatore.