2012-03-19 24 views
6

¿Cuál es el método recomendado para acceder a las utilidades persistentes de Plone y por qué?getToolByName() frente a otros

  • getToolByName (contexto, "portal_url")

  • adquisición directa: context.portal_url interfaz

  • ITools

etc.

+1

Y los últimos métodos de plone.api - http://readthedocs.org/docs/ploneapi/en/latest/utilities.html#get-tool –

+2

I Todavía considero plon e.api un poco de experimetanl y por lo tanto no recomendado ... también me gustaría saber la información detrás de la respuesta –

Respuesta

5

Creo que la respuesta está en el código de getToolByName(). Este método hace esto:

  • como un primer intento que trata de conseguir la herramienta deseada por mirar hacia arriba para la interfaz con getUtility y su inclusión en un contexto (que parece una buena cosa para mí)
  • como de repliegue que intenta adquirir directamente la herramienta desde el contexto de origen

Así que el único método "para gobernarlos a todos" parece ser: getToolByName Pero, como @keul dicho esto, también está el almacenamiento en caché de los involucrados, y mirando aquí (http://collective-docs.readthedocs.org/en/latest/misc/context.html#itools-interface) está claro que al usar la interfaz ITools, cuando no falla debido a las herramientas que aún no implementan esa interfaz, es más rápido.

Por las razones anteriores, al final me gustaría sugerir:

  1. ITools (más rápido)
  2. getToolByName (más seguro)

(como la adquisición directa ya está juzgado por el getToolByName, si falla, no tendrás más fortuna)

+1

Me pregunto por qué getToolByName no consulta primero ITools. –

+0

porque 'getToolByName' es un método en el paquete CMFCore, mientras que' ITool' es una interfaz en 'plone.app.layout'. Como su nombre de dominio señala, p.a.layout es un paquete de nivel superior y es específico de Plone. –

2

El uso de ITools las utilidades deben ser el mejor método, ya que están en caché. Sin embargo, esto a veces me dio problemas (relacionado con la herramienta portal_membership, pero no recuerdo los detalles), así que en esos casos raros cambio a getToolByName. El último es la adquisición directa.