La programmazione ad oggetti si configura oggi come un potente strumento di controllo per le attività logiche di un’applicazione. La forza e la maturazione delle metodologie di sviluppo si devono anche all’evoluzione di design pattern efficienti ed efficaci, comunemente riconosciuti e largamente diffusi in molti ambiti, in grado di risolvere problematiche ricorrenti nei compiti quotidiani.

Tra i pattern di tipo comportamentale, spicca senza dubbio il modello Chain of Responsibility (CoR): tale pattern afferma una maggiore elasticità dell’esecuzione dei processi, evitando la stretta dipendenza tra generatori ed esecutori.

Utilizzare il pattern CoR significa in sostanza porre un livello intermedio di controllo delle richieste, sfruttando il quale diverse entità potranno concorrere per l’esecuzione. Si crea in questa maniera una “catena” (in inglese chain), che verrà percorsa dal controller, elemento per elemento, fino a quando un soggetto (uno solo) non si incaricherà, in base alla propria disponibilità e allo stato corrente, di soddisfare il compito.

Le classi che svolgono ruolo attivo nel pattern CoR sono quindi tre: Client, che genera le richieste di attività da eseguire; Handler, che espone l’interfaccia per la gestione delle richieste e implementa opzionalmente le modalità di scorrimento della catena; ConcreteHandler, capace di svolgere effettivamente i compiti richiesti, o di passarli all’elemento successivo della catena se impossibilitato.

Un esempio pratico di applicazione di CoR si ha nella gestione degli ordini da parte di manager, dirigenti e presidente, ognuno dei quali con privilegi particolari per alcune tipologie specifiche di ordine. Si può così immaginare un manager non abilitato all’ordine in arrivo, che è costretto a passare l’attività al suo superiore, in modo da completarla. Altri esempi (in linguaggio C#) sono disponibili su CodeProject e riguardano l’elaborazione di chiamate telefoniche a un asilo nido da parte degli insegnanti e i prestiti effettuati da impiegati di banca.

Includere questo pattern nella propria programmazione significa arricchire il proprio codice, poiché si promuove il loose coupling (accoppiamento leggero o superficiale) e si innalza il livello di astrazione e generalizzazione delle attività.