-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« OSCON 2005 | Home | OSCON2005: i Lighting Talk »

Catalyst, TT, scelte ed abusi
03.08.05

Ho da poco iniziato ad utilizzare Catalyst - the elegant MVC framework per lo sviluppo della applicazioni web. Il paradigma MVC applicato al Perl è - semplicemente - una figata, e sviluppare applicazioni diventa rapido e divertente. Beh, quasi divertente: purtroppo c'è sempre qualcuno che mi mette un po' troppa fretta... ;-)

Mi sono in realtà ritrovato ad un tratto a potermi e dovermi cimentare contemporaneamente con strumenti di enorme potenza, quali Class::DBI, Template Toolkit, e lo stesso Catalyst. Imparando, quello che ho notato è che non sempre è facile capire quale degli strumenti a disposizione utilizzare per ogni determinato compito.

Faccio un esempio: mi sono trovato a dover creare una selection box su una pagina HTML. Tale selettore mostra una lista di categorie multilivello: non c'è un numero predefinito di livelli, quindi si tratta di una lista memorizzata in una tabella SQL decritta più o meno così:


id: bigint unsigned (primary key)
idparent: bigint unsigned
dsc: varchar

Il selettore dovrà mostrare questa struttura "srotolata", ad esempio:

  • Animali
  • Animali/Cani
  • Animali/Gatti
  • Animali/Gatti/Siamesi
  • Animali/Gatti/Persiani
  • Animali/Leoni
  • Piante
  • Piante/Alberi
  • Piante/Alberi/Pioppi
  • Piante/Alberi/Erbe

Si pone quindi il problema di attraversare l'albero delle categorie e di proporlo come lista. Non è tanto un problema di come farlo, ma di dove farlo.

  • Nel modello? Si tratta di dati provenienti dal database, e quindi forse dovrebbe essere il modello in grado di proporli già nella struttura che ci serve.
  • Nel controllo? Si tratta di un'elaborazione sostanziali dei dati, e quindi probabilmente più che nel modello sarebbe giusto che essa risiedesse nel controllo.
  • Nella vista? L'elaborazione ha il solo fine di visualizzare correttamente una selection box (tag HTML <SELECT>), quindi forse sarebbe un affare della vista.
  • Nel template? L'elaborazione dei dati per creare la selection box potrebbe avvenire direttamente dentro esso, senza che l'applicazione del sappia nulla. Questa decisione può avere un suo senso, in quanto separa in tutto la parte di codice Perl dai template.

La mia prima idea è stata proprio quella di attraversare l'albero delle categorie direttamente da template. Template Toolkit tuttavia non mi permetteva di implementare facilmente una ricorsione senza ricorrere all'istruzione PERL , che volevo assolutamente evitare proprio per mantenere una netta separazione tra codice Perl e template HTML. Avrei potuto utilizzare un ciclo iterativo al posto della ricorsione, ma non avevo voglia di scriverlo. ;-) Inoltre, mi sembrava di abusare del concetto di template, inserendoci codice anche troppo complesso, mentre essenzialmente ci dovrebbe essere la minima logica indispensabile al suo interno.

Sono dunque passato alla soluzione "vista", spostando tutto nella vista. In realtà la cosa non mi pare troppo elegante - per non dire che mi sembra alquanto rozza - poiché comunque dal controllo devo indicare alla vista di crearmi la struttura dati che mi serve. Sto quindi pensando di spostare tutto nel controller, ma di certo l'utilizzo di Catalyst mi porterà da solo ulteriori chiarimenti nell'immediato futuro. Almeno, spero. ;-)

Inviato da arthas il 03.08.05 12:01
Ti è piaciuto questo articolo? Iscriviti al feed!

Inviato da Federico il 17.08.05 21:13

Ciao, penso che non sempre il modello debba per forza essere una mappatura 1:1 di un'entità nel database. In questo caso potresti creare un modello che ti mostri la gerarchia come una struttura ad albero (per esempio una tied hash) nascondendo la struttura del database.

Inviato da arthas il 05.09.05 18:03

Anch'io penso una cosa simile, anche se Class::DBI non è che aiuti sempre in questo.

Nello specifico caso, comunque, visto che ciò che devo ottenere ha l'esplicito compito di popolare una selection box (*solo* quel compito), non sono del tutto sicuro che il modello sia necessariamente il posto giusto...

Michele.










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google