[ruby-it] Consiglio: dati attraverso i controller

Matteo Vaccari vaccari a pobox.com
Lun 31 Dic 2007 16:14:45 CET


On Dec 19, 2007 10:30 AM, Enzo Ferro <buzman1 a hotmail.com> wrote:

> Carlo Pecchia wrote:
> > Allora vale la pena avere un unico punto in cui leggi le informazioni
> > (in formato XML, attraverso REST) dal backend...
> > In prima battuta suggerirei un filtro (o un helper) in
> > app/controller/application.rb in modo da averlo disponibile per TUTTI
> > i controller che andrai a scrivere.
> > L'unico dubbio � relativo alle prestazioni: in questo modo OGNI click
> > al tuo sito invoca una chiamata al backend e relativo processamento
> > dell'XML risultante.
> > Se questa "struttura" non cambia troppo frequentemente forse sarebbe
> > il caso di averla in un file statico (che aggiorni tramite un
> > cron...). Insomma � il principio della "cache" :)
>
> Quindi scarteresti l'idea di metterle nella sessione?
>

La sessione, come regola, dovrebbe essere più vuota possibile e comunque
contenere solo informazioni specifiche dell'utente.

Io lo metterei in una variabile di classe di application_controller.  Userei
un metodo tipo:

def my_data_from_xml
  @@my_data_from_xml ||= read_data_from_xml
end

dentro a application_controller.rb.  Se non è chiaro il trucco del @@, puoi
immaginare che sia scritto così:

def my_data_from_xml
  @@my_data_from_xml = @@my_data_from_xml || read_data_from_xml
end

che si legge: se @@my_data_from_xml è definito, restituisci il suo valore;
altrimenti chiama la read_data_from_xml, assegna il risultato a
@@my_data_from_xml, e restituiscilo.  Lo scopo è di eseguire la read_data
una volta sola per tutti gli utenti e tutte le sessioni.

Se le informazioni sul file xml cambiano raramente, allora ti basta fare un
restart dell'applicazione quando cambiano e il nuovo valore verrà letto di
nuovo.

Matteo


Maggiori informazioni sulla lista Ml