venerdì 30 maggio 2008

Il pattern "catena di montaggio"

Applicabilità:


quando a fronte di una sorgente di dati più o meno complessi, occorre effettuare una catena di operazioni condizionate dal contentuto degli eventi stessi, operazioni che possono anche essere condizionate l'una dall'altra rispettando però la sequenza temporale. La catena di montaggio può prevedere instradamento multiplo per il prodotto in elaborazione, ed inoltre in macchine che dispongono di più unità di elaborazione, ogni stazione di montaggio può lavore su un Thread separato utilizzando il meccanismo del pipelining.

Struttura:


il pattern è composto da un oggetto "costruttore della catena" il cui compito è quello di assemblare la catena di montaggio, un oggetto "catena di montaggio" il cui compito è quello di eseguire il ciclo di montaggio, ed una sequenza di oggetti implementanti l'interfaccia "stazione di montaggio", che effettuano le operazioni necessarie per assemblare la soluzione finale.

Implementazione:


Stazione di montaggio
Una stazione di montaggio è un thread che effettua operazioni su dati prelevati da un unico input (una coda FIFO sincronizzata) e che può, in funzione del contenuto del dato da elaborare, instradare in output su una o più code il prodotto della sua elaborazione verso altre stazioni.

Catena di montaggio
questo oggetto si occupa dell'instradamento del "semilavorato" all'interno delle stazioni, fornendo la struttura, il percorso ed i meccanismi di trasporto dei semilavorati.

Costruttore della catena
Ovviamente questo à l'oggetto più importante: ha il compito di costruire la catena di montaggio, cioè interpretare correttamente la configurazione richiesta e posizionare le specifiche stazioni nell'ordine corretto. In questa situazione si può utilizzare un Factory Method delegando quindi alle implementazioni della factory la logica di assemblamento della catena di montaggio.

Un esempio


Ho utilizzato questo pattern per un applicativo di monitoring di una rete: ogni sessione di monitoring ha le sue caratteristiche particolari, per cui viene costruita una catena di montaggio ad hoc in funzione di una configurazione presente in un database; al passaggio di un pacchetto di dati, viene effettuata una sequenza di operazioni:

  • Calcolo di una funzione di valorizzazione di una parte del pacchetto determinata dal valore dell'intestazione del pacchetto e da dati contenuti nel DB

  • Aggiornamento di una cella di una tabella, la cui posizione e contenuto vengono calcolati dalla prima stazione di montaggio

  • Trace su un file in funzione dell'intestazione del pacchetto

  • Entry in un report HTML o XML

  • Aggiornamento di un grafico


Utilizzando la costruzione "al volo" della stazione di montaggio ho semplificato drasticamente il codice di interpretazione degli eventi, rimosso gran parte delle istruzioni condizionali e, cosa più importante, ho la possibilità di estendere a piacere le operazioni da svolgere al variare della configurazione.
Inoltre, utilizzando una catena di montaggio "multilinea", dove cioè gli eventi vengono instradati verso direzioni diverse ad ogni stazione, sono riuscito ad ottenere la variazione di comportamento in funzione dell'evento in modo molto semplice.

lunedì 19 maggio 2008

Sun catame lo strument!


"Mag-nifico!". Un piccolo gioiello di liuteria!
Un meraviglioso basso 4 corde fretless, manico in acero e wenge, tastiera in palissandro, corpo in frassino con un meraviglioso colore "natural", 2 pickups Bartolini, elettronica attiva, ponte in ottone, meccaniche Hipshot.
Detto tutto? Bhe.. no... manca il "suona da dio!"