La inyección de dependencias significa que un componente recibe sus colaboradores desde fuera en lugar de construirlos él mismo. El problema que resuelve es el acoplamiento: si una clase crea su propio cliente de base de datos, no puedes cambiarlo, ni probarla de forma aislada, ni controlar su ciclo de vida. Pasar las dependencias por el constructor las hace explícitas, hace que la clase sea honesta sobre qué toca, y te deja poner un doble en los tests o una implementación distinta por entorno.
Por qué lo preguntan los entrevistadores
Esto comprueba si entiendes un principio o solo usas una anotación de framework. Los entrevistadores quieren el argumento de acoplamiento y testabilidad, la idea de que los parámetros del constructor documentan las dependencias reales de una clase, y la madurez de decir que no hace falta un contenedor para hacerlo. Quien no sabe explicar el beneficio sin nombrar un framework normalmente no ha sentido el dolor que resuelve.
Cómo estructurar tu respuesta
- Defínela como pasar los colaboradores en vez de construirlos.
- Nombra los dos beneficios: testabilidad e intercambiabilidad.
- Señala que no hace falta framework, solo parámetros de constructor.
- Da un ejemplo en el que te ahorró tiempo de verdad.
Ejemplo de respuesta
Significa simplemente que a una clase se le entrega lo que necesita en vez de que lo construya. Si mi servicio de pedidos construye su propio cliente de Postgres en el constructor, está soldado a Postgres y a la cadena de conexión que haya en el entorno, y cada test de esa clase pasa a ser un test de integración. Si toma una interfaz de repositorio como parámetro del constructor, paso el real en producción y uno en memoria en los tests, y a la clase le da igual. El beneficio que he ido valorando más con el tiempo es la honestidad: la firma del constructor te dice exactamente qué toca esta cosa, así que cuando una clase toma siete dependencias eso es un olor de diseño que se ve en vez de uno que hay que ir a buscar. Quiero dejar claro que no creo que haga falta un contenedor. En servicios pequeños lo cableo todo a mano en un fichero de composición, y ese fichero se convierte en el mapa del sistema. Los frameworks ayudan cuando el cableado se vuelve tedioso, no antes.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cuándo un contenedor de DI añade más complejidad de la que quita?
- ¿Cómo gestionas el ciclo de vida de una dependencia inyectada?
- ¿En qué se diferencia esto del patrón service locator?
Más preguntas para Ingeniero de software
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas