Sobes.tech
Junior — Middle

Môžete vysvetliť rozdiely medzi princípom invertovania závislostí a injekciou závislostí?

sobes.tech AI

Odpoveď od AI

Princip inverzie závislostí (Princip inverzie závislostí, DIP) — je jedným z princípov SOLID, ktorý hovorí, že:

  • Moduly vysokého levelu by nemali závisieť od modulov nízkeho levelu. Oba by mali závisieť od abstrakcií.
  • Abstrakcie by nemali závisieť od detailov. Detaily by mali závisieť od abstrakcií.

Toto je princíp návrhu zameraný na zníženie prepojenia a zvýšenie flexibility kódu.

Vkladanie závislostí (Dependency Injection, DI) — je vzor alebo technika, ktorá implementuje princíp inverzie závislostí v praxi. DI znamená, že závislosti (objekty, ktoré sú potrebné triede na fungovanie) sú odovzdávané zvonku, nie sú vytvárané vnútri triedy.

Príklad:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Práca služby") }
}

class Client {
    let service: Service

    // Vkladanie závislosti cez konštruktor
    init(service: Service) {
        self.service = service
    }

    func execute() {
        service.doSomething()
    }
}

let service = RealService()
let client = Client(service: service)
client.execute()

Tu je DIP myšlienka, že Client závisí od abstrakcie Service, nie od konkrétnej implementácie RealService. DI je spôsob, ako odovzdať konkrétnu implementáciu klientovi zvonku.

Zhrnutie:

  • DIP — princíp návrhu.
  • DI — spôsob implementácie tohto princípu.