Pattern o non pattern?

Raffaeu mi porge un (gradito) complimento, che è però anche un interessante spunto per una riflessione. BTW, niente di nuovo all'orizzonte, perchè è una riflessione che ho già ampiamente esposto durante il tutorial dei Community Days, ma ritengo comunque interessante estenderla.

Un moderno emulo di Gian Battista Vico non esiterebbe ad includere il seguente scenario tra i "corsi e ricorsi storici": quando un dev entra in contatto con i [design|architecture|refactoring|vattelapesca] pattern la reazione è, tipicamente, una delle seguenti:

  1. Il dev diventa un "pattern fanatic": parla continuamente di pattern e li infila dappertutto (un divertente "asse cronologico"" di questo scenario 1 è disponibile in [Nilsson, ADDD.NET])
  2. Il dev li rifiuta in quanto (scegliere il proprio "best pick"): inutili, "acquacaldosi", eccessivamente astratti, ...

Ma i pattern rappresentano (o aggiungono) davvero un valore? Parliamone :-)

Partendo dal presupposto che la soluzione sia basata sul FX .NET o comunque implementata utilizzando un linguaggio che aderisca al paradigma object oriented, quando "progettiamo" ("to design" in inglese) un sistema dovremmo farlo tenendo *bene* in mente i requisiti e i princìpi di progettazione OO; i requisiti rappresentano ciò che il sistema deve fare e per un architetto sono "sacri ed inviolabili" giacchè:

  • Se funzionali, sono di competenza di un analista che ha *sicuramente* una comprensione del dominio  superiore alla nostra
  • Se non funzionali, sono frutto di qualche accordo "contrattuale" (es: SLA)

Ergo, non è certo inclusa nella "carta dei diritti" di un architetto la possibilità di modificarli a propria volontà. Per quanto riguarda i requisiti, inoltre, la norma ISO9126 svolge un ottimo lavoro di categorizzazione e rende evidente la natura di requisito di "topic" (troppo) spesso trascurati quali (a puro titolo di esempio ed in rigoroso ordine alfabetico): interoperability, security e testability.

Affrontato il "cosa", dedichiamoci al "come": un buon architetto è un uomo (o donna) di... Sani princìpi :-) Dal primordiale "...you must find pertinent objects..." ai vari DIP/LSP/OCP/SRP/... essi sono il "razionale" che ci deve guidare nelle nostre scelte progettuali a qualunque livello di dettaglio. Se anche i pattern non esistessero, questi principi ci permetterebbero in ogni caso di scrivere del "buon codice". Ma i pattern esistono, quindi... Che fare? Semplicemente, non vivere "inseguendoli" (i pattern). Non "snobbiamoli/ignoriamoli", ma impariamo ad evere un approccio rilassato nei loro confronti. Affrontiamo un problema alla volta e, se avessimo l'evidenza che quello che stiamo affrontando sia risolto da un pattern, usiamolo senza remore: nessuno oggi si inventa una tecnica risolutiva per il problema "gestione di un documento strutturato" quando esiste Composite.

Spesso però confondiamo una congettura con una evidenza, e dovremmo invece migliorare la nostra capacità di riconoscere le congetture. Di fronte ad una congettura, trasformiamoci in Pollicino ed usiamo requisiti e principi come "traccia" per affrontare lo scenario: facendolo sistematicamente realizzeremo comunque una soluzione strutturalmente simile a "qualche" pattern, nel qual caso valuteremo se un "refactoring to quel pattern" possa portare del valore aggiunto, altrimenti... Squadra che vince non si cambia :-)

In (estrema e quindi approssimativa) sintesi: i pattern possono essere un "fine" (refactoring to pattern) od un "mezzo" (abbiamo un problema *chiaramente* risolto da un pattern in modo ottimale), e a volte "il fine giustifica i mezzi". Di certo non "sono" un valore, anche se "hanno" valore, giacchè sono "soluzioni *dimostrate* funzionanti a problemi ricorrenti".

posted @ venerdì 18 luglio 2008 12.12

Print

Comments on this entry:

# re: Pattern o non pattern?

Left by Omar Damiani at 18/07/2008 13.53
Gravatar
Assolutamente d'accordo.
Che bello, sono appena rientrato dal pranzo e mi sembra di aver vissuto una sessione aggiuntiva dei Community Days (anche se, come hai detto, ai CD ne avevi parlato di questo...ma forse troppi "pensavano" alla panna cotta per cui giusto focalizzare) :))

Sempre edificante leggere/sentire questi concetti.
Grazie.

# re: Pattern o non pattern?

Left by raffaeu at 18/07/2008 13.53
Gravatar
Che dire, nulla da eccepire.
Devo darti pienamente ragione quando parli degli sviluppatori e che si avvicinano ai patterns, li vedono come se fosse bibbia. Allo stesso modo hai perfettamente ragione nel dire 'un sistema dovremmo farlo tenendo *bene* in mente i requisiti e i princìpi di progettazione OO'.
Allo stesso modo pero' dovremmo anche considerare il fatto che i patterns o il pattern che noi vogliamo applicare deve dare come risultato un design comprensibile e replicabile della soluzione che stiamo adottando, altrimenti non credi che non finira' mai la saga dello spaghetti code dove ci troviamo classi che si occupano di svolgere piu' compiti e codice replicato e duplicato qua' e la' senza senso?
Questo problema io l' ho riscontrato anche qui all' estero quindi mi chiedo, ma i programmatori non sono stufi di dover spendere per ogni modifica giornate intere, solamente perche' non hanno utilizzato un buon design architetturale in fase di progettazione e quindi non sanno esattamente dove apportare la modifica? E credo che questo valore venga fornito anche dall' ausilio di patterns, anche quelli personali non parlo solamente della GOF. Se poi il tuo discorso e' mirato all' ausilio della GoF ovunque e sempre allora dico no, perche' a volta un refactoring to ...quel pattern non porta valore aggiunto ma 'ore' aggiunte e nient' altro.

# re: Pattern o non pattern?

Left by Nicolò Carandini at 18/07/2008 14.14
Gravatar
Per me la questione è semplice: i patterns vanno studiati. Punto. Sono paragonabili agli attrezzi nella sacca dell'idraulico, mica li devi usare tutti per riparare un bagno! Però se non ce l'hai nel tuo "bagaglio colturale", alle volte rischi di rinventare l'acqua calda e probabilmente con una soluzione meno efficiente. Se li conosci puoi essere ISmartLazy, altrimenti sei solo un ILazy. Il fatto poi di usarli sempre e comunque, o di vantarsi di averne utilizzati un bel po', come se questo fosse garanzia di buon sviluppo, secondo me è una favola metropolitana, solo per chiarire che tale comportamento è un...
...antipattern!

# re: Pattern o non pattern?

Left by Luca Minudel at 18/07/2008 15.44
Gravatar
Wow

Mi trovo daccordo in modo imbarazzante !!!

# re: Pattern o non pattern?

Left by Stefano at 19/07/2008 0.00
Gravatar
Uhm.. Io invece non sono del tutto d'accordo, o meglio continuando a pensare che i pattern sono un "contorno" troveremo sempre persone che scrivono CLASS davanti ad un nome e credono di programmare ad oggetti.
Come decidiamo il livello di visibilita' di una classe/metodo/variabile se non seguendo delle linee guide o consigli, che altro non sono che pattern (maybe "light-pattern")?
Credo che concetti come State, Facade, Proxy, Factory, ma soprattutto quello che ne e' alla base, non debbano mancare nel bagaglio culturale di uno sviluppatore ad oggetti (figuriamoci di un architetto), allo stesso modo come sappiamo scrivere un loop (o dovremmo sapere :D ).
Oltre a questo credo che i pattern possano essere usati come linguaggio comune per descrivere una soluzione o un'idea ai diversi componenti di un team, come ad una persona "esterna".
Naturalmente e' solo una mia idea... ;)

# re: Pattern o non pattern?

Left by Luca Minudel at 19/07/2008 10.30
Gravatar
Stefano, cosi come l'ho capito il punto di Andrea è quello di usare i pattern in base alla singola esigenza specifica adattando la propria scelta di conseguenza

E marca la differenza di questo approccio da chi a priori sceglie di usarli e da chi di non usari ignorando la specificità del progetto che affonta


In una parola si chiama feedback - il suo opposto lo chiamo autismo

# re: Pattern o non pattern?

Left by Stefano at 19/07/2008 14.19
Gravatar
Non sto parlando di usare ma di conoscere.
Sto dicendo che una volta imparati i concetti base della programmazione ad oggetti, bisognerebbe imparare i GoF perche' sono uno dei migliori esempi di applicazione di quelle nozioni.
Senza quei concetti si rischia solo di reinvetare l'acuqa calda. Perche' devo spendere anni di esperienza per arrivare dove sono gia' arrivati altri con il loro lavoro?
Troppo uso di pattern? E dove sta il problema? E' normale. Ogni volta che impariamo qualcosa di nuovo vogliamo usarlo in ogni occasione. Dopo un po' di tempo di "overuse" si arrivera' ad un equilibrio. E' capitato a tutti. ;)

# re: Pattern o non pattern?

Left by Matteo Merlano at 21/07/2008 12.24
Gravatar
Sottolinerei che un punto forte pro-pattern sia quello (evidenziato pure nelle prime pagine dei PoEAA) di creare un lessico e un vocabolario comune. Mi ha divertito Andrea quando ai CommunityDays ha esaltato le qualità "lessicografiche" di Fowler, però in effetti parlava di una esigenza reale, ed importante: consolidare su un terreno lessicale condiviso il patrimonio di idee e skill di una disciplina ancora relativamente "immatura".

Certo è male un ricorso dogmatico e sistematico ai pattern (con il pericoloso corollario del "panico da mancanza di pattern applicabile"), ma la conoscenza "potenziale" credo ci voglia. Forse sarebbe utile non perdere di vista il concetto letterale di pattern, che renderei come "guida, sentiero".
Ora, dato un grande spazio vuoto in cui mi muovo, io sono liberissimo (per fare prima, per spirito d'avventura, per bighellonare in giro,ecc..) di non seguire i sentieri tracciati e andarmene dove mi portano i piedi e l'istinto. Ma almeno sapere che questi sentieri ci sono, e dove portano, e che altri li stanno percorrendo... beh, credo sia sempre cosa buona et giusta! :)

Matteo

Your comment:



 (will not be displayed)


 
 
 
Please add 6 and 1 and type the answer here:
 

Live Comment Preview:

 
«novembre»
domlunmarmergiovensab
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456