Patterns in Ruby: Observer
Capita spesso che al variare di un determinato valore tanti elementi distinti debbano aggiornarsi, ad esempio un grafico che si aggiorna al variare dei valori di una tabella, o le celle di un foglio di calcolo. In tutti questi casi torna utile l’Observer pattern. Nell’esempio che segue variando i valori delle valute verrà automaticamente aggiornato il grafico, ovviamente il numero degli observer non è limitato ad uno.
Il pattern è implementato anche in ActiveRecord di ruby on rails (vedi qui), lo stesso esempio risulta come segue:
Uno dei problemi che si possono incorrere nel design del pattern si verifica quando l’aggiornamento di piu valori non è un’operazione atomica, ad esempio quando si aggiorna lo stipendio ed il ruolo di un impiegato che è appena stato promosso, effettuando due operazioni distinte ci si può trovare nel caso in cui l’impiegato si ritrova ad essere tra quelli del suo ruolo con lo stipendio piu basso.
Il problema è stato risolto in ActiveRecord inquanto l’aggiornamento dei valori ed il loro salvataggio (ove scatta il trigger) sono operazioni distinte, nell’implementazione manuale bisogna tuttavia prestare attenzione.

Social Networks