|

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!
|