Zope 3, perche no
di Maurizio Delmonte
` Zope 3 e un framework di sviluppo applicazioni web maturo e stabile, facciamo la sua conoscenza
Maurizio Delmonte Ingegnere Elettronico, si occupa di tematiche Zope/Plone da Si interessa di programmazione in ambiente Windows ed in oltre cinque anni. Lavora in Redomino come responsabile tecnico particolare alla piattaforma .NET. Collabora attualmente con per limplementazione ed il delivery di soluzioni document oriented.
Limpaginazione automatica di questa rivista e realizzata al ` 100% con strumenti Open Source usando OpenOffice, Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp, Python e BASH
For copyright information about the contents of DEV, please see the section Copyright at the end of each article if exists, otherwise ask authors. Infomedia contents is 2007 Infomedia and released as Creative Commons 2.5 BY-NC-ND. Turing Club content is 2007 Turing Club released as Creative Commons 2.5 BY-ND. Le informazioni di copyright sul contenuto di DEV sono riportate nella sezione Copyright alla ne di ciascun articolo o vanno richieste direttamente agli autori. Il contenuto Infomedia e 2007 Infomedia e rilasciato ` con Licenza Creative Commons 2.5 BY-NC-ND. Il contenuto Turing Club e 2007 Turing Club e rilasciato ` con Licenza Creative Commons 2.5 BY-ND. Si applicano tutte le norme di tutela dei marchi e dei segni distintivi. ` E in ogni caso ammessa la riproduzione parziale o totale dei testi e delle immagini per scopo didattico purch e vengano integralmente citati gli autori e la completa identicazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%. La biograa dellautore riportata nellarticolo e sul sito www.infomedia.it e di norma quella disponibi` le nella stampa dellarticolo o aggiornata a cura dellautore stesso. Per aggiornarla scrivere a info@infomedia.it o farlo in autonomia allindirizzo http://mags.programmers.net/moduli/biograa
ope 3 una realt per moltissimi sviluppatori e aziende che basano il loro lavoro sulla sua tecnologia. Tuttavia ancora in parte percepito come unentit non finita e per questo come una sorta di prototipo su cui non vale la pena di perdere tempo. La realt ben diversa, ma prima vediamo come nasce Zope 3.
La versione 2 di Zope insiste sui concetti gi introdotti, superando le difficolt insite nelladozione di un framework: Zope 2 un application server vero e proprio, coerente, capace di gestire tutti gli aspetti dellapplicazione senza necessitare di altri servizi o di configurazioni extra rispetto a quelle di default. Di fatto Zope 2 anche unapplicazione web potente e flessibile, capace di offrire ai suoi utenti qualcosa di ancora unico agli inizi del 2000: la possibilit di sviluppare intere applicazioni utilizzando come strumento il semplice browser web e i "mattoncini" disponibili nella configurazione base dellapplication server, script, template, connettori verso DB esterni, etc. Il modello di sviluppo su web fu superato, poich ai vantaggi offerti (ancora sfruttati in caso di manutenzione e customizzazioni rapide di applicazioni) andavano aggiunti gli indubbi svantaggi: le singole applicazioni sviluppate su web erano difficilmente portabili in altri contesti, non era facile operare sul codice in modo collaborativo e, soprattutto, non era possibile applicare modalit di sviluppo irrinunciabili quali la produzione di test automatici o il versionamento del codice sorgente.
DEV > n.153 settembre 2007
usato per rendere semplice la vita degli sviluppatori lereditariet: ogni oggetto di alto livello, che si traduca in pagine web o in servizi applicazione, per poter vivere e utilizzare lambiente zope ha necessit di raccogliere in se una serie di funzionalit e meccanismi che vengono appunto ereditati - spesso senza rendersene conto - da classi che a loro volta incapsulano altre classi di pi basso livello. Questo consente di realizzare applicazioni molto potenti con pochissimo sforzo, tuttavia introduce delle rigidit, che a volte si traducono in limiti.
FIGURA 1
Gli adattamenti operati per tornare a sviluppare applicazioni sul file system avrebbero potuto garantire lunga vita a Zope 2, tuttavia i feedback in arrivo dalla comunit (che nel frattempo si andava formando intorno al prodotto data la sua licenza aperta) convinsero il guru inventore dei concetti vincenti di Zope, Jim Fulton, ad indagare nuove direzioni, che in seguito portarono allimplementazione di Zope versione 3.
Tanto per fare un esempio, considerando un caso pratico legato a Plone, una delle applicazioni pi note del mondo Zope, gli oggetti usati per gestire le pagine e le altre risorse manipolabili in Plone sono definiti a livello centrale: ad esempio le logiche che definiscono la scelta della pagina di default di una cartella sono definite a livello di classe. Pensiamo di voler fare in modo che tale comportamento per una determinata istanza (cio su una specifica cartella creata nel portale) sia diverso da quello previsto nella classe. Per fare questo la via classica seguita con la tecnologia Zope 2 consiste nel generare una propria classe, che eredit
FIGURA 2
33 <<
tutte le funzionalit necessarie dalla classe corrispondente alla cartella di base, e che implementa quanto necessario a dare il comportamento richiesto, sovrapponendosi allimplementazione originale. Tale classe sar poi usata per generare nel portale le cartelle con il comportamento richiesto (Figura 1). Questo modo di procedere, in molti casi fondamentalmente utile e irrinunciabile, in altri casi provoca un sovrappopolamento di classi, oltre che sovraccarico di lavoro e difficolt a mantenere nel tempo le varie classi di alto livello per seguire levoluzione delle classi di base. Inoltre rende molto complesso poter riusare sia il proprio codice che quello di altri in contesti diversi da quello per cui stato pensato, Zope appunto. Cercando di risolvere questo tipo di problematiche si giunti a formulare la risposta data scegliendo lo sviluppo a Componenti e limplementazione dellArchitettura a Componenti di Zope 3.
Molti nella comunit di sviluppo di Zope 3 hanno raccolto la proposta di Jim, e in particolare la sfida di trasformare la comunit di utenti in una vera comunit di sviluppo. Il risultato stato inizialmente incerto e confuso, difficile da apprezzare, in seguito si trovato un modo per far convergere gli sforzi tra gli sviluppi nelle due diverse versioni di Zope; infine si assiste oggi alla nascita di un nuovo Zope, capace di servire applicazioni web perfettamente in autonomia, o di essere utilizzato da parte di applicazioni che hanno ancora la loro base e le loro radici in Zope 2, mediante uno strato software noto come Five (2 + 3), come viene fatto ad esempio da Plone.
FIGURA 3
Di fatto, per chi si trova a utilizzare i singoli oggetti la parte da conoscere, che permette di comprendere cosa loggetto pu fare per noi, proprio quella costituita dagli attributi e metodi pubblici. Tale descrizione viene definita Interfaccia, e di fatto pu essere considerata sufficiente a capire come utilizzare lo specifico oggetto, e quindi a collegare tra loro vari oggetti utili ad erogare lapplicazione, come in una sorta di puzzle. Cosa resta? Bisogna dare corpo allinterfaccia in modo che effettivamente venga fatto quel che promette: linsieme di uninterfaccia e della sua implementazione definito Componente. La cosa che rende questa separazione di interfaccia e implementazione vantaggiosa data dal fatto che modificare la specifica implementazione a parit di interfaccia risulta molto agevole e flessibile! Come pure permettere ad un oggetto di assumere nuove funzionalit: dichiarando su di esso linterfaccia che ci interessa, sar facile permettergli di erogare le nuove funzionalit di cui abbiamo bisogno, senza modificarne la classe originale (Figura 2). Da notare che uninterfaccia non si applica solo ad una classe, ma pu essere applicata anche ad una specifica istanza della classe, cio ad uno specifico oggetto. Il meccanismo responsabile di tale flessibilit viene definito adattamento, e si pu manifestare in vari modi: ad esempio un adattatore pu essere usato per modificare
DEV > n.153 settembre 2007
FIGURA 2
limplementazione di un determinata interfaccia per uno specifico contesto (Figura 3), ma anche per aggiungere funzionalit o comportamenti agli oggetti. In Zope 3 gli oggetti contenuto di base non implementano direttamente quanto necessario alla loro visualizzazione a livello applicazione, per fare ci vengono usati componenti, noti come browser view, che adattano contemporaneamente loggetto richiesto e la richiesta in arrivo dal browser dellutente. Di fatto il browser view contiene le logiche di presentazione, che in tal modo vengono naturalmente separate da quelle intrinseche delloggetto, e possono pi facilmente essere manipolate e riusate in contesti diversi. Tramite il file di configurazione il browser view pu agganciare anche un template ZPT, il quale utilizzer quanto prodotto dalla classe del browser view presentandolo allutente in seguito alla sua richiesta. Per fissare le idee immaginiamo di dover fornire allutente il contenuto di una cartella in un archivio compresso. In Zope 3 potremo disporre di un semplice componente browser view capace di ottenere dal contesto il suo contenuto e di restituirlo compresso allutente che ne faccia richiesta. Mediante il file di configurazione potremo quindi associare la vista allinterfaccia dei componenti su cui vogliamo attivare tale funzionalit, definendo tra laltro anche il permesso di cui bisogna disporre per poter invocare la vista. E piuttosto evidente la facilit con cui tale funzionalit potrebbe essere attivata in contesti diversi da quello di partenza: ladattatore dovrebbe limitarsi a modificare la chiamata utile a ottenere i contenuti dal contesto a cui la vista si applica. E ancora pi facile intuire tale possibilit di riuso se immaginiamo un contesto in cui sia necessario anche un template di presentazione. Immaginiamo di avere a disposizione una vista capace di fornire la lista dei documenti contenuti in una cartella, ed il relativo template. In Zope 2, il template ZPT, oltre a presentare la struttura della pagina HTML, sarebbe infarcito di definizioni e logiche utili a poter costruire il risultato finale. Pensare di riusarlo modificando tali logiche, ad esempio per soddisfare il caso di una cartella virtuale capace di presentare in un unico punto tutti i documenti di uno stesso autore, equivarrebbe a dover rinominare il template e modificarne le logiche cablate, o quanto meno a mettere delle condizioni che in base al contesto applichino la logica originale, o quella da noi desiderata. Chiaramente tale metodo risulta ben poco flessibile. Con il meccanismo delle viste, invece, la struttura HTML del template rester la medesima, mentre le logiche staranno nei browser view specifici che associeremo alle interfacce che ci interessano
DEV > n.153 settembre 2007
in modo appropriato: flessibilit e riuso sono garantiti! Altra situazione di esempio per comprendere i benefici e la potenza introdotta dal nuovo paradigma di sviluppo viene fornito da Plone indagando il modo di costruire i men contestuali che permettono di manipolare gli oggetti (Figura 4): ammettiamo di voler generare un nostro menu contestuale, da utilizzare in corrispondenza di un nostro specifico oggetto. Per poterlo fare nel vecchio Plone lunica strada possibile consiste nel manipolare il template responsabile della costruzione di tali men per aggiungervi quello da noi gestito. Tale approccio, oltre ad essere ben poco elegante, presenta anche il limite seguente: se due diversi prodotti Plone hanno bisogno di modificare tale template, uno dei due guaster le modifiche dellaltro, in quanto il template unico, e i due prodotti sono tra loro indipendenti. Unica soluzione in questo caso quella di operare manualmente per ottenere un template in cui le due modifiche indipendenti convivano. Con le tecnologie Zope 3 possiamo invece fare in modo di registrare un nostro componente, che fornisca le interfacce attese per poter essere usato come men contestuale, senza toccare il template e senza rischiare di rovinare il lavoro di altri sviluppatori. Oltre a tali vantaggi, larchitettura a componenti offre un meccanismo molto pi elegante rispetto a quello utilizzato da Zope 2, per stabilire quali e con quali voci i men vadano mostrati in uno specifico contesto.
Silverlight
in un nuovo modo condiviso, ed usato da buona parte degli sviluppatori Ubuntu, e non solo. Il secondo un progetto La soluzione semplicemente utilizzare lattributo x:Name voluto dagli SolidColorBrush dellellisse, in modo costruire per loggetto stessi autori di Ubuntu mirato ad da poteruno strumentotramite gli attributi Storyboard.TargetName e lo referenziare open source utile alla gestione degli aspetti amministrativi delle scuole, che comprendestoryboard del Storyboard.TargetProperty direttamente dallo un servizio di calendaring, un sistema informativo rivolto agli studenti Canvas. Il risultato mostrato in AnimatedPage.htm. e uno strumento per il tracciamento delle competenze di professori e studenti. Entrambi tali progetti hanno un buon grado di maturit, e Conclusioni sono considerati un valido banco di prova a garanzia della qualit effettiva tecnologia molto promettente che permette Silverlight una di Zope 3. Infine citiamo Grok (http://grok.zope.org),pagine web in di includere contenuto XAML nelle proprie un progetto nato pochissimi mesi fa, ma gi realt di primo piano nel modo facile e veloce. La compatibilit con i vari browser mondo Zope. Grok stato forza rispetto alle applicazioni sicuramente il punto di partorito da alcuni dei pi noti e riconosciuti sviluppatori della comunit Zope,utilizzare XBAP standard, che se da una parte permettono di con lintento di potenza di WPF, una via dihanno la pi produttiva la piena offrire ai neofiti dallaltra accesso limitazione di al mondo Zope 3. poter essere visualizzate solamente in un browser IE e in Sviluppare proficuamente con Zope 3un approccio buona un sistema Windows. Il vantaggio di richiede una basato comprensione dellarchitettura a componenti, e del fattocon su XAML che gli sviluppatori hanno gi familiarit che lapplicazione unquindi codice e configurazione. Questo WPF e non sono mix di costretti ad imparare un nuovo si traduce in una fase lunga fase di apprendimento e in un linguaggio per includere contenuti dinamici in un applicativo processoversione 1.1, inoltre, permetterpoco produttivo, web. La di sviluppo apparentemente di utilizzare C#, soprattutto quindi il programmatore dal problema di creare sollevando se raffrontato in modo frettoloso con il modo di sviluppare applicazioni proprio di Zope 2 oLa prossima script Javascript compatibili multi-browser. di ambienti alternativi di degli strumenti Microsoft Expression costigenerazione ultima generazione. Per questo Grok astrae la metodologia di sviluppo di Zope tuir poi il collante tra le varie tecnologie, permettendo a 3 per ottenere qualcosa di pi semplice e lineare da comsviluppatori, artisti e web designer di parlare un linguaggio prenderecon cui sviluppatori alle prime armi. comune per gli realizzare siti web.
sulla struttura e sulla logica della nostra applicazione. Date unocchiata agli ottimi ufficiale Microsoft Silver[1] http://silverlight.net/ Sito tutorial disponibili su http: //grok.zope.org per capire quanto facile utilizzare Zope 3 light per le vostre applicazioni! [2] http://silverlight.net/samples/1.0/Silverlight-Pad/ default.html Silverlight Pad [3] Windows Presentation Foundation Unleashed Adam Conclusioni Nathan SAMS Publishing [4] Application Code+Markup, Charles Petzold, MicroPer soft Press voglia cimentarsi con Zope 3, il sito di rifechiunque rimento http://zope.org. Chi avr bisogno di approfondire i concetti inerenti larchitettura a componenti e il paradigma di sviluppo di Zope 3, Download del progetto potr consultare uno dei diversi libri disponibili, tra cui segnaliamo Web Component Development with Zope 3 di Scarica il Weitershausen, da di questo articolo all'indirizzo: Philipp vonprogetto completo molti ritenuto il miglior modo ftp://ftp.infomedia.it/pub/DEV./Listati/Dev152/Silverlight.zip per acquisire quanto necessario per utilizzare Zope 3.
>> 36
DEV > n.152 giugno-agosto 2007