Introduzione
difficile
Il CMS Plone è molto potente. È capace di svolgere molti compiti, e li svolge in modo efficace. Ma uno dei più grandi vantaggi di Plone sta nella sua vasta e sempre crescente libreria di moduli aggiuntivi, chiamati "add-on products", che estendono Plone a diversi livelli. Molte delle componenti del nucleo di Plone sono nate proprio come moduli aggiuntivi, e questi ultimi rappresentano anche la maniera più usata per condividere e riutilizzare il codice nella community di Plone.
Questa guida è stata creata per aiutare gli sviluppatori che si avvicinano alla progettazione di nuovi prodotti add-on e che vogliono rendere i loro programmi di alta qualità, usabili e utili all'intera comunità. Sarà anche utile a quegli sviluppatori che vogliono conoscere buone norme per migliorare le loro tecniche di programmazione.
Hai realmente bisogno di scrivere un nuovo prodotto?
A volte il prodotto ideale non è ancora stato scritto perchè ci si concentra spesso sulle proprie esigenze, partendo a scrivere da zero senza considerare l'aiuto che può dare il lavoro fatto in precedenza da altri. Prima di iniziare a creare un prodotto da zero, è quindi sempre consigliabile impegnare un po' di tempo ad esplorare la sezione Prodotti di Plone.org e la Plone Collective (un repository SVN di codice per Plone condiviso), per controllare che nessun altro abbia già risolto lo stesso problema.
Avere a disposizione pochi moduli aggiuntivi di altissima qualità è uno degli obiettivi a lungo termine della community di Plone, piuttosto che molti prodotti che risolvono problemi molto simili in maniera leggermente differente. La maggior parte degli sviluppatori Plone sono molto aperti e ben disposti verso nuovi collaboratori, e accoglierebbero molto volentieri un aiuto volto a migliorare un prodotto esistente!
La mailing list degli sviluppatori (Product-Developers Email List)
http://plone.org/support#product-developers
È una lista per gli sviluppatori che scrivono prodotti Plone, utilissima per ottenere consigli e aiuto per i propri progetti, aggiornamenti per nuove versioni di Plone, migrazioni e informazioni generali sullo sviluppo di moduli aggiuntivi.
Caratteristiche generali dei prodotti Plone di alta qualità
Possono essere prodotti molto semplici o estremamente complessi, ciò che rende un prodotto di altissima qualità varia molto in base alle esigenze che risolve. Detto ciò, i moduli aggiuntivi per Plone dovrebbero avere le seguenti caratteristiche:
Equilibrio tra estendibilità e semplicità
Un buon prodotto aggiuntivo è disegnato in modo da essere personalizzabile, estendibile, adattabile, quando è necessario. Dovrebbe essere facile definire diversi tipi di contenuto che magari usano logiche o strumenti particolari nel proprio prodotto. Dovrebbe essere facile subclassare qualsiasi tipo di contenuto personalizzato.
Allo stesso tempo, la semplicità è una virtù. Un prodotto ben progettato risolve i problemi per cui è stato creato, senza aggiungere troppi nuovi meccanismi o rendere ogni singolo elemento el prodotto personalizzabile, ma usando un numero minimo di metodi; in altre parole, dovrebbe fare una cosa e farla bene.
Utilizzo di tecniche di sviluppo Zope 3
Con l'arrivo di Zope 3 e della sua tecnologia particolare, la community di Plone dà ora molta importanza alla "componentizzazione". Prodotti complessi dovrebbero essere divisibili in sottoprodotti, librerie, metodi e classi, diventando componenti Zope 3 (interfacce, visualizzazioni, annotazioni, ecc.) che possono essere riutilizzati da altri prodotti.
Buoni punti di partenza per imparare come applicare le tecnologie di sviluppo Zope 3 per prodotti add-on possono essere:
- b-org: un tutorial molto tecnico di Martin Aspeli. Il video della presentazione di b-org della Plone conference 2006 tratta circa lo stesso argomento
- Il tutorial di Rocky Burt's intitolato "Developing Plone Products Using Zope 3 Technologies" della Plone conference 2006 può anche essere un valido aiuto. Si può leggere la documentazione o guardare il video.
Utilizzo di buone pratiche di sviluppo con Archetypes
Archetypes è il framework che Plone usa per costruire gli oggetti principali che lo compongono, e molti prodotti aggiuntivi riguardano la creazione di nuovi tipi di contenuto con Archetypes. Usando questa tecnologia correttamente si renderanno i propri progetti molto più robusti, affidabili e facili da usare.
Buoni punti di partenza per imparare a conoscere meglio Archetypes sono:
Tutttavia, potrebbe non essere necessario un tipo di contenuto personalizzato basato su Archetypes. Se si ha solo bisogno di estendere lo schema generale di un contenuto esistente in Plone, si dovrebbe usare archetypes.schemaextender. Ciò permetterà di sfruttare i punti di forza di ATContentTypes (o altri tipi di contenuto basati su Archetypes esistenti) senza essere invasivi e senza subclassare. Per maggiori informazioni su Schema Extender:
- "Customize the fields of the content types" how-to
- "SchemaExtender Extends Your Mind" presentazione
- archetypes.schemaextender su pypi
Interfaccia utente ben progettata
Plone è orgoglioso di essere il content management system più usabile e accessibile. Gli sviluppatori di prodotti aggiuntivi dovrebbero fare molto attenzione all'interfaccia utente dei propri prodotti. Per esempio:
- A partire da Plone 3.0, i prodotti add-on possono trarre vantaggio dal KSS javascript framework. Un uso efficiente di javascript può aiutare a costruire un'interfaccia molto più completa e interattiva. Tuttavia, le interfacce dovrebbero poter essere usate da browser che non usano javascript, senza perdere funzionalità.
- I prodotti dovrebbero usare appropriate widgets di Archetypes o formlib per editare le interfacce. si può consultare:
- The Archetypes Widgets Reference
- Altri campi e widgets dal SVN repository di Archtypes
- È sempre buona norma introdurre le opzioni di configurazione nel pannello di controllo di Plone, cosicché gli amministratori del sito vi possano facilmente accedere. Meglio evitare di costringere gli utenti ad usare la ZMI o il filesystem per configurare un prodotto.
Sicurezza
Grazie a Zope, Plone è un sistema molto sicuro, ed è generalmente piuttosto resistente alla maggior parte dei problemi di sicurezza più comuni che spesso affliggono, per esempio, CMS basati su PHP/MySQL. Ma ogni prodotto è una potenziale fonte di problemi di questo tipo, bisogna quindi dedicare molta attenzione alla sicurezza quando se ne sviluppa uno.
Utili punti di partenza sulla sicurezza in Plone sono:
Internazionalizzazione (i18n)
Gli utilizzatori di Plone provengono da tutto il mondo, e il framework di internazionalizzazione di Plone è una delle funzionalità più forti e utili. Ma non può essere molto efficace a meno che gli autori di prodotti add-on non si assicurino che le loro creazioni siano conformi all'i18n (nessun problema per gli sviluppatori che non parlano lingue straniere, non è necessaria nessuna competenza linguistica!).
Utili punti di partenza:
Dare un nome al proprio prodotto
Scegliere un buon nome per il proprio prodotto può essere di grande aiuto agli utenti per capire di cosa si tratta e a cosa serve. Sfortunatamente la storia di Plone non dà un gran buon esempio da questo punto di vista, e rinominare un prodotto è complicato a causa dell'inconveniente delle migrazioni per successive versioni; quindi meglio scegliere subito un nome significativo. Ecco qualche raccomandazione:
- Scegliere un nome che sia unico, memorabile e non troppo simile a quello di altri prodotti esistenti.
- Un buon nome descrive o suggerisce la funzione del prodotto.
- Per quanto riguarda le eggs per la distribuzione del prodotto, è importante ricordare che il namespace non è il prodotto
- Evitare la parola "Plone" nel nome del prodotto - normalmente è ovvio che si tratta di un prodotto per Plone. Se si sente proprio la necessità di inserire la parola "Plone", è meglio scegliere un nome tipo "XYZ per Plone" ("XYZ for Plone"). Plone® e un marchio registrato della Plone Foundation, e molti pensano che prodotti che contengono questa parola siano sotto la responsabilità di quest'ultima, ma ciò confonde inutilmente.
- Evitare acronimi gergali come "AT", "CMF", "NG" ecc. e nomi basati sulla tecnologia che sta dietro al proprio prodotto.
- Evitare prefissi che contengano il nome della propria azienda, o di quella per cui è stato sviluppato.
- Non usare solo caratteri minuscoli nel nome che vedranno gli utenti solo perché la convenzione in Zope 3 lo prevede nel codice.
Correndo il rischio di incorrere in qualche polemica, questi sono alcuni buoni nomi per prodotti add-on e altri nomi "meno buoni" (mai si direbbe qualcosa su nessuno degli sviluppatori di prodotti Plone, solo non si considerano ottimali tutti i nomi che sono stati dati ai prodotti...)
| buono | meno buono |
|---|---|
| "Wicked" - un prodotto per wiki | ATSchemaEditorNG |
| "Iterate" - prodotto per lo staging di documenti | Kukit (si è scoperto essere un insulto in norvegese!) |
| "Quills" - un prodotto per il blogging | CMFSin |
| "Bling" - un prodotto javascript | mxmContacts |
