¿Mezclar servicios y objetos hoja en el constructor para la inyección de dependencia?

Estoy tratando de hacer que mi código sea lo más comprobable posible, lo que significa usar la inyección de dependencia correctamente.

He leído que está bien usar new() para instanciar un objeto, si ese objeto cumple con ciertos criterios. En particular, no debería aceptar un "no newable" en su constructor.

Por ejemplo, debería poder ir

new Form('signup');

porque no hay forma de que mi contenedor DI sepa cómo crear el formulario de "registro" antes de tiempo.

Puedo hacer que esto funcione la mayor parte del tiempo, pero ahora me gustaría que el Formulario pueda validarse a sí mismo, usando un validador de terceros, como:

$form->validate()->isValid();

... lo que significa que tendría que pasar un servicio de validación.

Realmente preferiría tener el validador incluido porque la mayoría de las veces será necesario validar el formulario y, de lo contrario, tendría que realizar el trabajo adicional para configurar el validador por mi cuenta.

¿Está bien, en este caso hacer:

new Form(Validator $validator,$name); 

preguntado el 09 de marzo de 12 a las 15:03

1 Respuestas

Diría que cualquier valor u objeto que requiere un objeto para estar en un estado válido es una de las dependencias de ese objeto; en su ejemplo, eso incluiría de forma completamente válida el nombre del formulario. No creo que el tipo de dependencia se pueda usar para decir si se debe inyectar o no - Martin Fowler en este articulo por ejemplo, muestra objetos a los que se les inyectan cadenas, y los contenedores DI generalmente se pueden configurar para proporcionar valores de cadena.

Con esto en mente, inyectar el validador y la cadena está bien y es completamente correcto en mi opinión.

respondido 10 mar '12, 18:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.