Bookmark and Share
Document Actions

Zope 3: una nuova speranza
difficile

Una strategia generale e una specifica per Quills

Quando si estende un prodotto con Zope 3, si adatta un tipo di contenuto esistente senza crearne uno nuovo. In questo caso d'uso ciò significa che bisogna solo adattare WeblogEntry, senza dover cambiare la classe Weblog. Inoltre, si può ottenere che gli adattamenti fatti funzionino anche con la classe VideoWeblogEntry, a patto che quella classe implementi l'interfaccia IWeblogEntry definita da Quills.

Già ci si accorge che in questo caso Zope 3 porta dei vantaggi, rendendo i cambiamenti che si devono effettuare molto meno intrusivi e molto più compatibili con altri aggiustamenti.

Verranno usate e introdotte le seguenti tecnologie di Zope 3:

  • events (eventi)
  • utilities (utility)
  • adapters (adattatori)
  • annotations (annotazioni)

Strategia generale

Verranno creati due prodotti: uno generale per estendere un oggetto quando questo soddisfa alcuni criteri, e uno specifico per estendere le WeblogEntry di Quills quando contengono dei contenuti audio. La strategia per il prodotto generale è:

  • Un event è gestito da un gestore di events, che usa una...
  • utility per decidere se un...
  • adapter è necessario, nel qual caso...
  • annotations vengono aggiunte all'oggetto originale.

Quindi: quando un certo evento ha luogo, viene richiesto ad una utility se questo evento giustifica un adattamento di un oggetto. L'adattamento è implementato aggiungendo annotazioni a quell'oggetto.

Tutto ciò è implementato dal prodotto keywordannotator. Questa strategia può probabilmente sembrare un po' misteriosa all'inizio, ma è normale e risulterà inoltre più chiara leggendo la sezione successiva, in cui questa idea generale viene tradotta in una strategia specifica per il caso d'uso che stiamo seguendo.

La strategia in Quills

Ecco come vengono usate le quattro tecnologie di Zope 3 che abbiamo appena visto nella strategia specifica relativa al caso d'uso:

event
Qualcuno aggiunge una parola chiave audio ad una voce WeblogEntry. A questo punto Zope lancia quello che viene chiamato un evento IObjectModified. Si registra un gestore di eventi che agisce ogni qual volta una WeblogEntry (o in realtà qualsiasi oggetto che richiede di implementare l'interfaccia IWeblogEntry) viene modificata o aggiunta.
utility

Il codice che gestisce questo evento richiama una utility. Questa si rivolge alla WeblogEntry e decide che l'aggiunta di questa parola chiave significa che questa voce ora implementa anch'essa l'interfaccia marker IMaudio che definiremo. Se un oggetto implementa o fornisce un'interfaccia "normale", allora questo oggetto possiede tutte le funzioni e gli attributi che sono definiti da quell'interfaccia. Un'interfaccia marker non ha nessuna funzione o attributo, quindi si tratta fondamentalmente solo di un'etichetta: l'oggetto viene marchiato come IMaudio.

Bisogna anche assicurarsi che sia possibile aggiungere in seguito annotazioni a questa voce, facendo in modo che fornisca l'interfaccia standard IAttributeAnnotatable definita in Zope 3.

adapter
Ora si può adattare (estendere) quest'oggetto che implementa IMaudio e aggiungere annotazioni. L'adattamento fondamentalmente è molto simile all'ereditare (ciò che avviene in Zope 2), ma con una tecnica differente. Viene messo temporaneamente un involucro ad un oggetto, viene eseguita un'azione su di esso (in questo caso aggiungere annotazioni) e poi viene rimosso l'involucro. Ogni altro codice (per esempio lo stesso codice in Quills) non sa o non presta attenzione al fatto che l'oggetto WeblogEntry è stato adattato o messo in un involucro e ora ha qualcosa in più. Per quel codice, la WeblogEntry è ancora una normale WeblogEntry, anche se ora possiede delle annotazioni.
annotations
Le annotazioni possono essere aggiunte in diversi modi, ma il più usato è il metodo associato con l'interfaccia IAttributeAnnotatable che è stata menzionata sopra. Nel nostro caso, due link vengono aggiunti in un nuovo attributo nascosto di quella WeblogEntry.

Tutto ciò è implementato dal prodotto quadapter (Quills Adapter), che usa il prodotto keywordannotator. Infatti, il prodotto quadapter viene aggiunto nella examples directory di keywordannotator. In ogni modo, entrambi i prodotti hanno la possibilità di essere testati, si può quindi eseguire i test e controllare che tutto funzioni.

Questa sezione è piuttosto importante, perché definisce gli obiettivi e la strategia generali, elementi essenziali per capire  a fondo la sezione seguente che presenta il codice effettivo. Dall'altra parte, leggere la sezione che segue potrebbe essere un aiuto  per comprendere bene  questa strategia.

Ognuna delle sezioni seguenti presentano come prima cosa il codice dal prodotto generale keywordannotator e poi il codice dal prodotto specifico quadapter. Può essere difficile capire le azioni di keywordannotator, ma sarà in genere di aiuto leggere il codice corrispondente di quadapter.

 
by Alice Narduzzo last modified 2008-05-21 18:01