TypeScript Academy · Aula

Fundamentos da Inversão de Controle

Entenda por que e quando inverter dependências.

Aula 1 de 413 etapas

Fundamentos da Inversão de Controle é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.

Dependências codificadas diretamente

Quando uma classe cria seus próprios colaboradores com new, ela fica fortemente acoplada a esses tipos concretos. Isso torna a classe difícil de reconfigurar e de testar.

Um exemplo fortemente acoplado

Aqui, o serviço cria seu próprio logger. Não há como substituir o logger por outro sem editar a classe.

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();

O que é inversão de controle?

Inversão de Controle (IoC) muda quem decide quais são as dependências. Em vez de uma classe criá-las, algo externo as fornece. A classe declara o que precisa e o recebe.

Injeção de dependências

Injeção de dependências (DI) é a forma comum de alcançar IoC: passe os colaboradores em vez de construí-los internamente. Quem chama controla qual implementação será usada.

A versão com injeção

Agora o logger é fornecido externamente. O serviço não sabe nem se importa mais com qual logger concreto recebeu.

class OrderService {
  constructor(private logger: { log(m: string): void }) {}
  place() { this.logger.log("order placed"); }
}
new OrderService(new ConsoleLogger()).place();

Por que IoC melhora a facilidade de teste

Como as dependências vêm de fora, os testes podem receber dublês ou espiões. Você pode verificar o comportamento sem E/S real, bancos de dados ou chamadas de rede.

const calls: string[] = [];
const fakeLogger = { log: (m: string) => calls.push(m) };
new OrderService(fakeLogger).place();
console.log(calls); // ["order placed"]

Dependa de abstrações

IoC funciona melhor quando as classes dependem de uma interface, em vez de uma classe concreta. Qualquer implementação que satisfaça a interface pode ser injetada.

interface Logger { log(m: string): void; }
class OrderService {
  constructor(private logger: Logger) {}
}

Injeção pelo construtor

A injeção pelo construtor passa as dependências como parâmetros do construtor. Elas ficam disponíveis imediatamente e podem ser marcadas como readonly, deixando-as claras e obrigatórias.

class OrderService {
  constructor(private readonly logger: Logger) {}
}

Injeção por propriedade

A injeção por propriedade define uma dependência em uma propriedade pública ou configurável após a construção. Ela é mais flexível, mas permite que o objeto exista temporariamente sem a dependência.

class OrderService {
  logger!: Logger; // set after construction
  place() { this.logger.log("placed"); }
}
const s = new OrderService();
s.logger = new ConsoleLogger();

Escolhendo um estilo

Prefira a injeção pelo construtor para dependências obrigatórias, pois o objeto nunca fica em um estado parcialmente construído. Use a injeção por propriedade para colaboradores opcionais ou para desfazer ciclos de construção.

Prévia dos contêineres de IoC

Em aplicações grandes, configurar as dependências manualmente se torna trabalhoso. Um contêiner de IoC automatiza a criação e o fornecimento das dependências, algo que as próximas lições explorarão com InversifyJS.

Verificação rápida

Verificação rápida sobre esta lição.

Recapitulação

A inversão de controle move a criação das dependências para fora da classe; a injeção de dependências as fornece internamente. Dependa de interfaces, prefira a injeção pelo construtor para dependências obrigatórias e facilite os testes injetando dublês.

Grátis para começar

Aprenda TypeScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
101
Aulas
352

Perguntas Frequentes

A aula “Fundamentos da Inversão de Controle” é grátis?

Sim — o texto completo de “Fundamentos da Inversão de Controle” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.

O que vou aprender em “Fundamentos da Inversão de Controle”?

Entenda por que e quando inverter dependências. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar TypeScript Academy?

Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Fundamentos da Inversão de Controle”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de TypeScript Academy?

Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fundamentos da Inversão de Controle
  2. Injeção pelo Construtor
  3. Contêineres de DI com InversifyJS
  4. Tokens de Serviço com Segurança de Tipos
← Voltar para TypeScript Academy