Preparação de entrevista para iOS 6 — Injeção de dependência

May 04 2023
Perguntas da entrevista Inversão de controle é um padrão de projeto de software que se concentra na transferência de controle do desenvolvedor para a estrutura. O framework é então responsável por criar e gerenciar as instâncias dos objetos, enquanto o desenvolvedor é responsável por fornecer as configurações específicas do aplicativo.

Questões de entrevista

  1. O que é injeção de dependência e por que ela é útil?
  2. Você pode dar um exemplo de como a injeção de dependência é usada no iOS?
  3. Quais são os diferentes tipos de injeção de dependência (injeção de construtor, injeção de setter, etc.) e quando cada tipo deve ser usado?
  4. Como a injeção de dependência pode ser usada para melhorar a capacidade de teste de um aplicativo iOS?
  5. Você pode discutir alguns desafios ou armadilhas comuns que surgem ao usar a injeção de dependência no desenvolvimento do iOS e como evitá-los?
  6. Quais são algumas estruturas populares de injeção de dependência do iOS e quais são seus principais recursos e vantagens?
  7. Você pode discutir algumas práticas recomendadas para usar a injeção de dependência no desenvolvimento do iOS?

Inversão de controle é um padrão de projeto de software que se concentra na transferência de controle do desenvolvedor para a estrutura. O framework é então responsável por criar e gerenciar as instâncias dos objetos, enquanto o desenvolvedor é responsável por fornecer as configurações específicas do aplicativo.

É um padrão que permite inverter o fluxo de controle. Para conseguir isso, você move todas as responsabilidades de uma classe, exceto a principal para fora, tornando-as suas dependências. Assim, seu objeto não sabe como criá-los. Isso torna o código testável e de fácil manutenção, eliminando relacionamentos rígidos entre as classes.

Injeção de dependência

A injeção de dependência é um dos poucos padrões que ajuda a aplicar princípios de inversão de controle. Você pode implementar DI de várias maneiras

Injeção de Construtor

No Constructor Injection, passamos todas as dependências através do construtor como parâmetros.

protocol EngineProtocol {
  func start()
  func stop()
}

protocol TransmissionProtocol {
  func changeGear(gear: Gear)
}

final class Car {
  private let engine: EngineProtocol
  private let transmission: TransmissionProtocol

  init(engine: EngineProtocol, transmission: TransmissionProtocol) {
    self.engine = engine
    self.transmission = transmission
  }
}

final class Car {
  private var engine: EngineProtocol?
  private var transmission: TransmissionProtocol?

  func setEngine(engine: EngineProtocol) {
    self.engine = engine
  }

  func setTransmission(transmission: TransmissionProtocol) {
    self.transmission = transmission
  }
}

A ideia principal é que um trecho de código que requer algumas dependências não as criará para si mesmo, mas o controle sobre o fornecimento dessas dependências é adiado para alguma abstração superior.

O principal benefício da Inversão de Controle é que

  • DI ajuda a melhorar a modularidade do seu código, mais fácil de entender e manter
  • Fácil de injetar dependências simuladas ou falsas durante o teste
  • Flexibilidade e extensibilidade do seu aplicativo, permitindo que você substitua ou troque facilmente as dependências usadas por seus componentes.