Autowire todas las clases en config o

Autowire todas las clases en config o

Uso php-di para clases de carga automática en mi aplicación API.

Para mayor velocidad, sin embargo, php-di establece que debe autoconectar las clases manualmente para la compilación. Entonces nos dan este ejemplo:

return [
  // ... (your definitions)

  UserController::class => autowire(),
  BlogController::class => autowire(),
  ProductController::class => autowire(),
  // ...
];

No entiendo qué clases tenemos que conectar automáticamente para la compilación. ¿Todas las clases? O solo los controladores?

Como la aplicación es bastante grande, puedo imaginar lo grande que será este archivo de configuración de DiC. No solo eso, sino que si creo un nuevo repositorio o modelo, entonces no debería olvidar agregarlo a mi configuración de DiC.

fuente: http://php-di.org/doc/performances.html

Mostrar la mejor respuesta

Puede agregar solo su controlador: PHP-DI recorrerá recursivamente todas sus dependencias (y sus dependencias) para compilarlas. Los controladores suelen ser el punto de entrada de la aplicación, por lo que es un buen punto de partida para encontrar todos (o la mayoría) de los servicios de la aplicación.

Sin embargo, creo que es más una cuestión de actuaciones. Si su aplicación tiene tiempos de respuesta súper cortos, entonces tal vez valga la pena, de lo contrario, agregar todas sus clases para compilar puede no hacer una diferencia visible.

Entonces, ¿está diciendo que si agrego todas las clases (no solo los servicios/controladores), habrá una diferencia de velocidad (incluso si es muy pequeña)? Porque si se repite recursivamente, no debería haber ninguna diferencia, ¿verdad?

Si un controlador toma el servicio X como una dependencia, y ese servicio X toma el repositorio Y como una dependencia, simplemente agregar el controlador a la configuración compilará todo 3 clases. Sin embargo, si hay un servicio Z que no depende de un controlador, no se compilará. Así que podría agregar todos los controladores, servicios y otras clases para compilar todo, pero quizás (¿probablemente?) no valga la pena. Yo diría que mida primero antes de dedicar demasiado tiempo a eso. Tal vez agregar solo los controladores sea suficiente.