Sobes.tech
Junior — Middle

შეგიძლიათ ახსნათ დამოკიდებულების ინვერსიის პრინციპის და დამოკიდებულების ინექციის განსხვავებები?

sobes.tech AI

პასუხი AI-სგან

დამოკიდებულებების უკუღმართობა (Dependency Inversion Principle, DIP) — არის SOLID პრინციპებიდან ერთ-ერთი და ამბობს, რომ:

  • მაღალი დონის მოდულები არ უნდა იყოს დამოკიდებული დაბალი დონის მოდულებზე. ორივე უნდა იყოს დამოკიდებული აბსტრაქციებზე.
  • აბსტრაქციები არ უნდა იყოს დამოკიდებული დეტალებზე. დეტალები უნდა იყოს დამოკიდებული აბსტრაქციებზე.

ეს არის დიზაინის პრინციპი, რომელიც მიზნად ისახავს კოდის კავშირების შემცირებას და მოქნილობის გაზრდას.

დამოკიდებულებების ინექცია (Dependency Injection, DI) — არის ნიმუში ან ტექნიკა, რომელიც პრაქტიკაში ახორციელებს ამ პრინციპს. DI ნიშნავს, რომ დამოკიდებულებები (ობიექტები, რომლებიც კლასს სჭირდება მუშაობისთვის) გარედან გადაეცემა, არ იქმნება კლასის შიგნით.

მაგალითი:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("სერვისის სამუშაო") }
}

class Client {
    let service: Service

    // დამოკიდებულების ინექცია კონსტრუქტორით
    init(service: Service) {
        self.service = service
    }

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

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

აქ, DIP — ეს იდეაა, რომ Client დამოკიდებულია აბსტრაქციაზე Service, არა კონკრეტულ რეალიზაციაზე RealService. DI — ეს მეთოდია, როგორ გადაეცემა კონკრეტული რეალიზაცია გარედან Client-ს.

საგ summary:

  • DIP — დიზაინის პრინციპი.
  • DI — ამ პრინციპის განხორციელების მეთოდი.