I modelli di design sono strumenti. Come gli strumenti, ci sono due modi per usarli: il modo corretto e il modo sbagliato. Ad esempio, se ti do un cacciavite e un chiodo e ti chiedo di unire due pezzi di legno insieme, dovresti chiedermi un martello. I martelli sono usati per le unghie, mentre i cacciaviti sono usati per le viti.
Troppo spesso, un modello di design è pubblicizzato come One True Way, che spesso è vero solo quando sorgono problemi particolari. Gli sviluppatori junior sono spesso dei bambini quando trovano qualcosa di nuovo con cui giocare; vogliono applicare quel modello di design a tutto . E non c'è nulla di intrinsecamente sbagliato in questo, fintanto che alla fine apprendono che il Pattern A si applica al Problema B, e Pattern C si applica al Problema D. Proprio come non usi un cacciavite per guidare le unghie, non usi un particolare modello solo perché esiste; usi lo schema perché è lo strumento migliore (conosciuto) per il lavoro.
Il rovescio della medaglia è anti-pattern. Cose che si sono dimostrate di volta in volta pessime, solitamente in termini di tempo di esecuzione o memoria. Tuttavia, entrambi i pattern e gli anti-pattern non vanno bene allo sviluppatore che non capisce perché esistono. Gli sviluppatori amano pensare che quello che stanno facendo è nuovo e inventivo, ma la maggior parte delle volte non lo sono. Probabilmente è stato pensato prima. Le persone prima di loro hanno creato i modelli a causa dell'esperienza.
Ovviamente, gli sviluppatori junior spesso escogitano nuovi modi di fare cose vecchie, ea volte quelle sono migliori. Tuttavia, troppo spesso finisce per essere un caso dell'effetto Dunning-Kruger; lo sviluppatore sa quanto basta per creare un programma funzionale, ma non capisce i propri limiti. L'unico modo per superare questo sembra essere attraverso l'esperienza, sia positiva che negativa. Ignorano i pattern perché credono di essere superiori, ma non sanno che, in realtà, 10.000 sviluppatori hanno già utilizzato un design specifico, e poi lo hanno scartato perché in realtà era cattivo.
Agile favorisce "fare le cose in modo reattivo" per quanto riguarda l'adeguamento rapido alle esigenze in evoluzione dei clienti. Non favorisce né i modelli di progettazione, né li disprezza. Se un modello è il metodo più veloce e affidabile, lo sviluppatore dovrebbe utilizzarlo. Se un modello particolare costerebbe più tempo del semplice "completamento", è probabile che l'uso di qualcosa che non è un modello sia corretto (presumendo, ovviamente, che le prestazioni non siano gravemente degradate, ecc.). Se non è possibile trovare uno schema noto, è preferibile progettare il proprio oltre a dire al cliente "no". I clienti, in particolare i clienti paganti, di solito hanno ragione.
Chiunque affermi che i modelli sono The Way, o afferma che i pattern sono The Bane Of Existence, sono sbagliati. I modelli sono strumenti, pensati per essere applicati a situazioni specifiche e hanno vari gradi di successo in base alle circostanze. Questa è una verità, una che non dipende dal fatto che tu abbia scelto MVC o meno, se usi o meno oggetti di trasferimento dati, ecc. Ciò che conta è implementare il codice in un arco di tempo ragionevolmente breve, che funzioni ragionevolmente bene per gli utenti, ed è ragionevolmente privo di bug logici.
Di solito , i pattern permetteranno una forma coerente di design, e funzioneranno meglio di ignorare tutti gli schemi a favore della scrittura di idee originali al 100%, ma non è possibile evitare tutti i pattern. Ad esempio, se y = x + 5, scriveresti davvero y = x + (5 * 3 + 15/3) / 4, solo per evitare il pattern di scrittura x + 5? No non siete. Stai scrivendo y = x + 5 e vai al prossimo problema.
Le persone usano i pattern ogni giorno e va bene . Ciò che conta di più è avere un codice logicamente funzionale, che si blocca raramente e che è facile da usare. Nient'altro conta di più.