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.
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
