Consiglio: dati attraverso i controller

Ciao a tutti,
scusate il Subject un pò incompresibile ma non sapevo come spiegarmi.
Avrei bisogno di un consiglio.
Nella mia applicazione ROR al momento del login, che è sempre la prima
pagina che viene visualizzata, avrei la necessità di leggere da un
documento XML alcune informazioni che poi dovrei riutilizzare in tutti
gli altri controller.
Ho letto un pò di cose sulla sessione, ma prima di avventurarmi in
“luoghi oscuri” volevo un vostro consiglio.
I dati che devo leggere dal file XML sono una serie di “id” con i
relativi “title” (che sono i nomi delle sezioni dell’applicazione).
La mia domanda è: mi conviene mettere nella sessione queste informazioni
per averle disponibili in tutti i controller, oppure ci sono altri modi
più consoni?

A voi le risposte,
grazie mille e buona giornata.

Queste “sezioni” sono personalizzate/-abili per utente, oppure sono le
stesse per tutti?

2007/12/19, Enzo F. [email protected]:

Carlo P. wrote:

Queste “sezioni” sono personalizzate/-abili per utente, oppure sono le
stesse per tutti?

Grazie per la rapidissima risposta.
Le sezioni sono le stesse per tutti, però questa mia applicazione ROR
deve rispecchiare la struttura di un’applicazione in backend, ogni volta
che mi loggo devo leggere il file XML dell’interfaccia REST di
quest’ultima.

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” :slight_smile:

2007/12/19, Enzo F. [email protected]:

In effetti la sessione ti offre il vantaggio di non dover ricaricare
dal backend ogni volta le informazioni (si comporta come una
cache…).
Resta il “dubbio” sull’eleganza di tale approccio… Se le sessioni le
usi comunque allora è ok, se le usi appositamente…forse potresti
farne a meno.

Perché non fai qualche prova?
n fondo il discorso application helper/filter resta valido (punto
unico!) poi vedi cosa è meglio tra:

  • sessione
  • leggo dal backend ad ogni click
  • leggo da un file apposito ad ogni click (tale file viene aggiornato
    via cron “ogni tanto”).

Il 19/12/07, Enzo F.[email protected] ha scritto:

Carlo P. wrote:

In effetti la sessione ti offre il vantaggio di non dover ricaricare
dal backend ogni volta le informazioni (si comporta come una
cache…).
Resta il “dubbio” sull’eleganza di tale approccio… Se le sessioni le
usi comunque allora è ok, se le usi appositamente…forse potresti
farne a meno.

Perché non fai qualche prova?
n fondo il discorso application helper/filter resta valido (punto
unico!) poi vedi cosa è meglio tra:

  • sessione
  • leggo dal backend ad ogni click
  • leggo da un file apposito ad ogni click (tale file viene aggiornato
    via cron “ogni tanto”).

OK faccio qualche prova,
ti ringrazio moltissimo,
buona giornata.

Carlo P. 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” :slight_smile:

Quindi scarteresti l’idea di metterle nella sessione?

La struttura non cambia molto frequentemente.

Grazie mille

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ì:

Oops, volevo dire “se non è chiaro il trucco del ||=”.

M

On Dec 19, 2007 10:30 AM, Enzo F. [email protected] wrote:

il caso di averla in un file statico (che aggiorni tramite un
cron…). Insomma � il principio della “cache” :slight_smile:

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