Sobes.tech
Junior — Middle

Μπορείς να δώσεις ένα παράδειγμα υλοποίησης της αρχής της αντιστροφής των εξαρτήσεων σε ένα έργο;

sobes.tech AI

Απάντηση από AI

Η Αρχή της Αντιστροφής των Εξαρτήσεων (Dependency Inversion Principle, DIP) δηλώνει ότι τα modules υψηλότερου επιπέδου δεν πρέπει να εξαρτώνται άμεσα από τα modules χαμηλότερου επιπέδου, αλλά και τα δύο πρέπει να εξαρτώνται από αφαιρέσεις (π.χ., πρωτόκολλα ή διεπαφές).

Παράδειγμα σε Swift για iOS:

// Αφαίρεση
protocol DataService {
    func fetchData() -> String
}

// Συγκεκριμένη υλοποίηση
class NetworkDataService: DataService {
    func fetchData() -> String {
        return "Δεδομένα από το δίκτυο"
    }
}

// Κλάση που εξαρτάται από την αφαιρεση, όχι από την συγκεκριμένη υλοποίηση
class ViewModel {
    private let dataService: DataService

    init(dataService: DataService) {
        self.dataService = dataService
    }

    func getData() -> String {
        return dataService.fetchData()
    }
}

// Χρήση
let networkService = NetworkDataService()
let viewModel = ViewModel(dataService: networkService)
print(viewModel.getData()) // Εκτυπώνει: Δεδομένα από το δίκτυο

Εδώ, το ViewModel εξαρτάται από το πρωτόκολλο DataService, όχι από την συγκεκριμένη κλάση NetworkDataService. Αυτό επιτρέπει την εύκολη αλλαγή της υλοποίησης της υπηρεσίας, π.χ., για δοκιμές ή άλλη πηγή δεδομένων, χωρίς να αλλάξει ο κώδικας του ViewModel.