On Wed, 9 Dec 2009 12:36:06 +0100
Gianni Cozzolongo <[email protected]>
wrote:


Ciao,

> 
> e' necessario creare un istanza dell'utility ogni volta che si vuole
> accedere al db?
> 

La risposta breve: no.

La risposta lunga:

non ne sono sicuro al 100% perché non mi sto a spulciare gli internals
di Z3 ogni giorno, ma il codice:

fancy_utility = getUtility(IFancy, u"fancyutility")

non è detto che crei sempre l'utility: diciamo, semplificando davvero
molto, che zope si tiene le chiamate a getUtility in cache e se hai già
chiamato getUtility con quei parametri ti ritorna direttamente l'istanza
dell'utility senza __call__are il factory di nuovo.
Detto ciò, io non farei però conto sul fatto che quell'istanza sia un
singleton, difatti se non ricordo male questa "specie di cache" del
component registry è threadlocal.
In sostanza è molto difficile sapere se è un'istanza "nuova" o
"vecchia" ma il fatto è che, per quanto riguarda le utility, non
dovrebbe importartene a livello di logica.

Per quanto riguarda le prestazioni beh, non ti devi preoccupare perché
ci ha già pensato Z3 ;)

Riassumendo, consiglio di fare i getUtility sempre all'interno di un
metodo: nell'__init__ se viene usata in più metodi o direttamente nel
metodo (senza agganciarla al self) se va usata solo in quello.

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Plone-IT mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/plone-it
http://www.nabble.com/Plone---Italy-f21728.html

Rispondere a