Credo che la stessa banda di quattro classifichi modelli di design come
a common solution to a commonly occurring problem*
Quindi sì, i pattern sono rilevanti quando si verifica lo stesso tipo di problema. E questo ci porta ad un problema con il termine "Design Pattern". Un modello è qualcosa di riconoscibile che si verifica ripetutamente. Quindi in realtà non esiste un modello di design, esiste un modello di problemi.
Alcuni linguaggi di programmazione possono avere soluzioni native per alcuni di questi problemi. Il libro "Design Patterns" menziona di per sé che il pattern visitor è di poco valore se si utilizza CLOS, poiché il multi-dispatch è supportato nativamente da CLOS, lo stesso problema che il pattern Visitor sta cercando di risolvere.
Inoltre, il framework .NET ha una build nel meccanismo degli eventi per la pubblicazione di eventi su più listener, rendendo il pattern Observer meno rilevante in questo contesto.
Il passaggio dalle applicazioni desktop alle applicazioni web ** cambia anche il tipo di problemi di programmazione che dobbiamo risolvere. Molti dei modelli del libro "Design Patterns" sono rilevanti per le applicazioni desktop, ma non tanto per le applicazioni web. Ovviamente, con le app a singola pagina, questi pattern potrebbero essere di nuovo rilevanti sul lato client.
Ma i modelli di design e libri come "Design Patterns" o "Patterns of Enterprise Application Architecture" sono di enorme valore quando sei un programmatore alle prime armi e devi affrontare un nuovo tipo di problema per la prima volta; poiché ero la prima volta che mi è stato chiesto di implementare la funzionalità Annulla. Se non fosse stato per il libro "Design Patterns", probabilmente la mia implementazione sarebbe stata come immagazzinare un'istantanea dei dati dopo ogni operazione di modifica dello stato *** - un approccio molto incline agli errori e orribilmente inefficiente.
Quindi sì, alcuni dei pattern diventano meno rilevanti nel tempo, e quando diventi un programmatore esperto, pensi meno a loro. Ma per un principiante, sono preziosi, purché ricordiate che sono i mezzi per risolvere un problema - e non una ricerca per usarne il maggior numero possibile.
* il preventivo potrebbe non essere accurato al 100% poiché viene preso dalla memoria
** nella mia esperienza, sta diventando molto comune per le aziende scegliere i meccanismi di consegna web per le applicazioni line-of-business interne.
*** dopo aver appreso la programmazione funzionale e le strutture di dati funzionali, allora questo potrebbe effettivamente essere il modo in cui oggi lo risolverei.