Sobes.tech
Junior — Middle

Meg tudná magyarázni az függőségek fordított elvének és a függőségek injectionjának különbségét?

sobes.tech MI

Válasz az MI-től

Függőségek fordított iránya (Dependency Inversion Principle, DIP) — a SOLID elvek egyik része, amely kimondja, hogy:

  • A magas szintű moduloknak nem szabad alacsony szintű moduloktól függniük. Mindkettőnek az absztrakcióktól kell függnie.
  • Az absztrakciók nem szabad, hogy a részletektől függjenek. A részleteknek az absztrakcióktól kell függniük.

Ez egy tervezési elv, amely a kód kapcsolódásának csökkentésére és rugalmasságának növelésére irányul.

Függőség injektálás (Dependency Injection, DI) — egy minta vagy technika, amely a függőségek fordított irányának elvét gyakorlatban valósítja meg. A DI azt jelenti, hogy a függőségek (osztály működéséhez szükséges objektumok) kívülről kerülnek átadásra, nem az osztályon belül jönnek létre.

Példa:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Szolgáltatás munkája") }
}

class Client {
    let service: Service

    // Függőség injektálása a konstruktoron keresztül
    init(service: Service) {
        self.service = service
    }

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

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

Itt a DIP az az ötlet, hogy a Client az absztrakcióra, azaz a Service-re függ, nem a konkrét RealService megvalósításra. A DI az a mód, ahogyan a konkrét megvalósítást kívülről átadjuk a Client-nek.

Összefoglalva:

  • DIP — tervezési elv.
  • DI — ennek az elvnek a megvalósítási módja.