Conceptos básicos de inversión de control
Comprenda por qué y cuándo invertir las dependencias.
Conceptos básicos de inversión de control es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
Dependencias codificadas directamente
Cuando una clase crea sus propios colaboradores con new, queda estrechamente acoplada a esos tipos concretos. Esto dificulta reconfigurarla y probarla.
Un ejemplo estrechamente acoplado
En este caso, el servicio crea su propio registrador. No hay forma de sustituirlo por otro sin editar la clase.
class ConsoleLogger { log(m: string) { console.log(m); } }
class OrderService {
private logger = new ConsoleLogger(); // hard-coded
place() { this.logger.log("order placed"); }
}
new OrderService().place();¿Qué es la inversión de control?
La inversión de control (IoC) cambia quién decide cuáles son las dependencias. En lugar de crearlas la clase, las proporciona algo externo. La clase declara lo que necesita y lo recibe.
Inyección de dependencias
La inyección de dependencias (DI) es la forma habitual de lograr la IoC: se pasan los colaboradores en lugar de construirlos internamente. Quien llama controla qué implementación se utiliza.
La versión con inyección
Ahora el registrador se proporciona desde el exterior. El servicio ya no sabe ni necesita saber qué registrador concreto ha recibido.
class OrderService {
constructor(private logger: { log(m: string): void }) {}
place() { this.logger.log("order placed"); }
}
new OrderService(new ConsoleLogger()).place();Por qué la IoC mejora la facilidad de prueba
Como las dependencias proceden del exterior, las pruebas pueden recibir objetos simulados o spies. Puede verificar el comportamiento sin realizar operaciones de E/S, acceder a bases de datos ni hacer llamadas de red reales.
const calls: string[] = [];
const fakeLogger = { log: (m: string) => calls.push(m) };
new OrderService(fakeLogger).place();
console.log(calls); // ["order placed"]Depender de abstracciones
La IoC funciona mejor cuando las clases dependen de una interfaz en lugar de una clase concreta. Se puede inyectar cualquier implementación que cumpla la interfaz.
interface Logger { log(m: string): void; }
class OrderService {
constructor(private logger: Logger) {}
}Inyección mediante el constructor
La inyección mediante el constructor pasa las dependencias como parámetros del constructor. Están disponibles de inmediato y se pueden marcar como readonly, lo que deja claro que son necesarias.
class OrderService {
constructor(private readonly logger: Logger) {}
}Inyección mediante propiedades
La inyección mediante propiedades establece una dependencia en una propiedad pública o modificable después de la construcción. Es más flexible, pero permite que el objeto exista temporalmente sin esa dependencia.
class OrderService {
logger!: Logger; // set after construction
place() { this.logger.log("placed"); }
}
const s = new OrderService();
s.logger = new ConsoleLogger();Elegir un estilo
Prefiera la inyección mediante el constructor para las dependencias obligatorias, porque el objeto nunca se encuentra en un estado de construcción incompleta. Utilice la inyección mediante propiedades para colaboradores opcionales o para romper ciclos de construcción.
Introducción a los contenedores de IoC
En las aplicaciones grandes, conectar las dependencias manualmente se vuelve tedioso. Un contenedor de IoC automatiza la creación y el suministro de dependencias. En las próximas lecciones explorará este proceso con InversifyJS.
Comprobación rápida
Comprobación rápida de esta lección.
Resumen
La inversión de control traslada la creación de dependencias fuera de la clase; la inyección de dependencias las proporciona desde el exterior. Dependa de interfaces, prefiera la inyección mediante el constructor para las dependencias obligatorias y facilite las pruebas mediante la inyección de objetos simulados.
Aprende TypeScript con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 101
- Lecciones
- 352
Preguntas frecuentes
¿La lección «Conceptos básicos de inversión de control» es gratis?
Sí — el texto completo de «Conceptos básicos de inversión de control» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Conceptos básicos de inversión de control»?
Comprenda por qué y cuándo invertir las dependencias. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Conceptos básicos de inversión de control»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de inversión de control
- Inyección mediante constructor
- Contenedores de DI con InversifyJS
- Tokens de servicio seguros