Penso che ci siano tre fattori che entrano in gioco qui.
Mancanza di massa critica
In primo luogo, un pattern è fondamentalmente poco più che dare un nome ad un codice che implementa un particolare "pezzo" di funzionalità. L'unico modo in cui quel nome fornisce molto valore reale è se puoi dipendere da tutti sapendo che cosa significa il nome, semplicemente usando il nome, capiscono immediatamente molto del codice.
I modelli non hanno mai stabilito la massa critica di cui avevano bisogno per ottenere ciò. Piuttosto il contrario, AAMOF. Nei 20 (o così) anni trascorsi dalla pubblicazione del libro GoF, sono abbastanza sicuro di non averne visto almeno una decina di conversazioni in cui tutti erano interessati a conoscere abbastanza modelli di progettazione per il loro uso per migliorare la comunicazione.
Per dirla in modo un po 'più singolare: i modelli di progettazione sono falliti in modo specifico perché non sono riusciti.
Too Many Patterns
Penso che il secondo fattore principale sia che, se mai, all'inizio chiamarono troppi modelli. In un discreto numero di casi, le differenze tra i pattern sono sufficientemente sottili da rendere quasi impossibile affermare con certezza se una particolare classe si adatta a un modello o a un altro (o forse entrambi - o forse nessuno dei due).
L'intento era che avresti potuto parlare del codice a un livello più alto. Saresti in grado di etichettare una porzione di codice abbastanza grande come l'implementazione di un particolare modello. Semplicemente usando quel nome predefinito, tutti quelli che ascoltano di solito sanno quanto si preoccupano di quel codice, quindi puoi passare alla prossima cosa.
La realtà tende ad essere quasi l'opposto. Diciamo che sei in riunione e dì loro che questa particolare classe è una facciata. Metà della gente dell'incontro non ha mai saputo o ha dimenticato da tempo cosa significhi esattamente. Uno di questi ti chiede di ricordargli le differenze esatte tra una facciata e, ad esempio, un Proxy. Oh, e il paio di persone che conoscono davvero i modelli trascorrono il resto della riunione discutendo se questa dovrebbe essere veramente considerata una Facciata o "solo" un Adattatore (con quell'unico che insiste ancora sul fatto che a lui sembra un Proxy).
Dato che il tuo intento era davvero solo per dire: "questo codice non è molto interessante, passiamo", provando a usare il nome di un modello solo aggiunto distrazione, non valore.
Mancanza di interesse
La maggior parte dei modelli di progettazione non gestisce realmente le parti interessanti del codice. Si occupano di cose come: "come posso creare questi oggetti?" E "come faccio a ottenere questo oggetto per parlare con quello?" Memorizzare i nomi dei pattern per questi (così come i suddetti argomenti sui dettagli e così via) sta semplicemente mettendo un sacco di energia in cose di cui i programmatori di solito non si preoccupano molto.
Per dirla in modo leggermente diverso: i pattern trattano le cose che sono uguali tra molti programmi - ma ciò che rende davvero interessante un programma è come diversi da altri programmi.
Sommario
Gli schemi di progettazione non sono riusciti perché:
- Non sono riusciti a raggiungere la massa critica.
- La differenziazione tra i modelli era insufficiente per garantire chiarezza.
- Si occupavano principalmente di parti di codice a cui quasi nessuno importava davvero.