Junior
O que é injeção de dependência (DI)?
sobes.tech IA
Resposta da IA
A Injeção de Dependências (DI) é um padrão de projeto em que as dependências de um componente são fornecidas de fora, em vez de serem criadas por ele próprio. Isto permite maior flexibilidade, testabilidade e facilidade de manutenção do código.
Princípios básicos:
- Inversão de controlo (IoC): O componente não gere a criação das suas dependências.
- Separação de responsabilidades: A criação das dependências está separada do seu uso.
Vantagens da DI:
- Melhor testabilidade: É fácil substituir dependências reais por mocks em testes.
- Redução do acoplamento: Os componentes tornam-se menos dependentes uns dos outros.
- Maior flexibilidade e reutilização: É fácil alterar a implementação de uma dependência sem modificar o código do componente.
- Gestão simplificada de dependências: Especialmente em projetos grandes.
Formas de implementar DI em Android:
- Manual (DI manual): As dependências são passadas no construtor ou através de setters.
- Usando frameworks: Dagger 2, Hilt, Koin. Estes frameworks automatizam o processo de criação e fornecimento de dependências.
Exemplo manual:
// Dependência
interface AnalyticsManager {
fun trackEvent(eventName: String)
}
// Implementação da dependência
class FirebaseAnalyticsManager : AnalyticsManager {
override fun trackEvent(eventName: String) {
// Lógica de tracking no Firebase
}
}
// Componente que necessita da dependência
class UserRepository(private val analyticsManager: AnalyticsManager) { // A dependência é passada através do construtor
fun getUser(userId: String): User? {
analyticsManager.trackEvent("UserFetched")
// Lógica para obter o utilizador
return null
}
}
// Local onde os objetos são criados e ligados
fun main() {
val analytics: AnalyticsManager = FirebaseAnalyticsManager()
val userRepository = UserRepository(analytics) // Injeção de dependência
}