L'European Plone Symposium 2010 entra nel vivo, dopo il talk di Simone De Ponti sull'uso di Plone all'interno di un complesso sistema di pubblicazione aziendale dove Plone è stato integrato con differenti sistemi per realizzare uno specifico caso d'uso.
È tempo di Matt Hamilton, di Netsight, che ci presenta quale è il ruolo dei 'Plone integrators' e di come essi possono operare all'interno di Plone. A differenza degli sviluppatori essi usano Plone integrandolo con altri sistemi attraverso l'utilizzo di differenti prodotti aggiuntivi evitando di modificare parti sostanziali di codice.
Un problema fondamentale di questo lavoro riguarda la personalizzazione di prodotti già esistenti per lo sviluppo di nuove funzionalità senza dover per forza modificare il codice del prodotto stesso.
Il caso reale discusso nel talk presenta l'integrazione del prodotto plone.app.discussion con sistema esterno di anti-spam. Il prodotto in questione, che consente di gestire i commenti in Plone, comprende già al suo interno un sistema di captcha ma in questo caso si ha la necessità di aggiungere il supporto ad Akismet.
Per risolvere il problema è possibile seguire differenti strade:
Una prima soluzione possibile consiste nel rifacimento di alcune parti sostanziali del prodotto originale piuttosto che la sovrascrittura diretta di alcune parti di codice attraverso un sistema di sottoclassi. Ma questa soluzione potrebbe risultare piuttosto invasiva e dispendiosa in termini di tempo.
Un'altra via consiste nell'utilizzo della Zope Component Architecture per sovrascrivere solo alcuni componenti in modo da modificarne il comportamento standard.
La scelta finale però ricade sull'uso degli eventi; in questo modo è possibile aggiungere la funzionalità desiderata senza modificare in alcun modo il codice esistente. Ulteriori vantaggi consistono in una notevole facilità di implementazione del codice aggiuntivo all'interno di un piccolo prodotto.
Ma come funziona il tutto?
All'interno di plone.app.discussion sono presenti degli eventi che vengono attivati alla creazione di un commento. Dato questo presupposto possiamo quindi sviluppare una piccola porzione di codice che intercetta l'evento ed esegue una determinata azione.
La registrazione di un semplice subscriber in zcml permette quindi di realizzare la nostra funzionalità aggiuntiva.
<subscriber
for = ".interfaces.IMyOBject
.interfaces.IMyEvent"
factory = ".event.myEventHandler" />
L'azione vera e propria verrà realizzata all'interno della classe myEventHandler.
Soluzioni di questo tipo possono essere realizzate in molteplici casi d'uso; a seconda dell'evento intercettato possiamo infatti configurare particolari comportamenti in base alle nostre esigenze.
Per es.
- alla creazione di una cartella è possibile aggiungervi altri contenuti
- alla creazione di un particolare tipo contenuto è possibile modificarne alcuni metatdata in base alle proprie esigenze
- alla modifica di un contenuto possiamo verificare l'effettiva validità dei suoi parametri in base a determinate condizioni
Personalmente credo che la cosa più difficile in questo caso possa essere l'abitudine a lavorare in questo modo, dal punto di vista dello sviluppatore ci dev'essere la capacità di integrare un sistema coerente di eventi all'interno del proprio prodotto.
Da parte degli integratori ci vuole la capacità di conoscere gli eventi disponibili in modo tale da poterli intercettare per estendere le funzionalità dei prodotti utilizzati.
- Archive
- 2009 2010 2011