Gestión de dependencias en aplicaciones Zend Framework 2 MVC

Como el ServiceLocatorAwareInterface probablemente seráeliminado del AbstractController en ZF3, las dependencias deben pasarse a través del constructor o mediante métodos de establecimiento.

Teniendo esto en cuenta, considere el caso de uso de un usuario o controlador de sitio con acciones como registrar, activar cuenta, iniciar sesión, cerrar sesión, etc. Como mínimo, esto requeriría un servicio de usuario y 2 formularios. Agregue algunas acciones más relacionadas (autenticación remota, vinculación de cuentas, etc.) y obtendrá 4 o 5 formularios.

Pasar todas estas dependencias a través del constructor sería complicado en el mejor de los casos, y lo que es más importante, generalmente solo se requiere 1 formulario por acción.

¿Cuál de las siguientes técnicas crees que es mejor y por qué?

Cree controladores separados para cada acción, de modo que cada controlador solo requerirá un formulario único (además de un servicio). Por ejemplo, RegistrationController, LoginController, LinkAccountController, etc.

Usted termina con muchos controladores de esta manera.

En la fábrica para el controlador, suministre diferentes formularios según la acción que se solicita.

La construcción del controlador se vuelve dependiente de esta fábrica, y más específicamente del entorno de solicitud (enrutamiento, etc.) Usted podría construir el controlador directamente (para pruebas o lo que sea), pero luego debería asegurarse de que las dependencias estuvieran disponibles y lanzar excepciones si no.

Utilice el administrador de eventos, active un evento en el controlador cuando se requiera un formulario y deje que un controlador de eventos suministre la dependencia a pedido.

Esta técnica está descrita.aquí.Su controlador dependería de un EventManager en lugar de un ServiceLocator, que probablemente no sea mucho mejor.

Pase el FormElementManager al controlador y solicite los formularios.

No es mejor que el propio SL lo más probable.

Directamente construir formas dentro de los controladores.

¿Cómo afecta esto a la testibilidad?La misma pregunta se aplicaría entonces al manejo de un controlador con múltiples servicios (en lugar de formularios).

¿Otro?

Ver también:

Pasando formularios vs entrada sin procesar a la capa de servicioClases de fábrica vs cierres en Zend Framework 2

Respuestas a la pregunta(2)

Su respuesta a la pregunta