Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Dudas sobre la figura del Proveedor de Servicios en Symfony

21 de diciembre de 2014

Hola!

Si entiendo bien el archivo cache/appDevDebugProjectContainer es una caché con los métodos de creación de los servicios registrados en la aplicación.

¿Es el equivalente al concepto Proveedor de Servicios que por ejemplo se define en Pimple?, concretamente al implementar la interfaz ServiceProviderInterface? Es decir, mis dudas radican en que no parece existir una figura de proveedor de servicios como un patrón de diseño para éstos. (quizás no haga falta)

La verdad esperaba encontrarme en el código fuente de Symfony, al menos en los servicios internos, los típicos closures para cuando se requiere el servicio y un patrón que incluya acciones para iniciar/parar el servicio. Aunque según veo, creo que esto se añade con eventos; por ejemplo, al realizar la acción de response se ejecutan los listeners correspondientes para 'parar' lo que se hubiera especificado.

Referencias al 'mini' contenedor de servicios Pimple, por si alguien no lo conoce:

Muchas gracias y un saludo.


Respuestas

#1

Tienes razón en todo lo que comentas: Pimple se basa en el ServiceProviderInterface y en los closures con los que defines los servicios. Mientras tanto, en Symfony el contenedor de servicios es totalmente diferente. Los servicios se configuran mediante archivos XML/Yaml/PHP y su código se escribe en clases PHP normales. Además, se puede intervenir en el contenedor mediante los compiler passes, que permiten modificar servicios y configuración al compilar el contenedor y antes de que se ejecute la aplicación.

Si lo piensas un poco, verás que Pimple no es más que un array PHP con unas pequeñas utilidades para convertirlo en un mini contenedor de servicios. Para muchas aplicaciones es más que suficiente, pero para aplicaciones complejas no es más que un juguete ridículo. Mientras tanto, el contenedor de servicios de Symfony es demasiado complejo para las aplicaciones sencillas, pero es bastante completo cuando tu aplicación crece en complejidad. En cualquier caso, lo importante es saber que los dos son completamente diferentes y hay que pensar en ellos de manera totalmente diferente.

@javiereguiluz

21 diciembre 2014, 19:45