Jaký je rozdíl mezi inverzí závislostí a injekcí závislostí?
sobes.tech AI
Odpověď od AI
Princip inverze závislostí (Dependency Inversion Principle) je jedním z principů SOLID, který říká:
- Moduly vyšší úrovně by neměly záviset na modulech nižší úrovně. Oba by měly záviset na abstrakcích.
- Abstrakce by neměly záviset na detailech, detaily by měly záviset na abstrakcích.
Vstřikování závislostí (Dependency Injection, DI) je návrhový vzor, jeden ze způsobů, jak implementovat inverzi závislostí. Předpokládá předání závislostí (objektů, na kterých závisí třída) zvenčí, místo toho, aby je třída vytvářela sama.
Hlavní rozdíly:
- DIC - princip návrhu, DI - návrhový vzor.
- DIC - určuje, jak by měly být vztahy mezi moduly vysoké a nízké úrovně (závislost na abstrakcích).
- DI - metoda, která umožňuje tyto vztahy realizovat. Je to konkrétní technika pro dodávání závislostí objektu.
Příklady vstřikování závislostí:
-
Vstřikování přes konstruktor: Závislosti jsou předávány přes konstruktor.
// Swift class UserFetcher { private let apiService: APIServiceProtocol // Závislost na abstrakci init(apiService: APIServiceProtocol) { // Vstřikování přes konstruktor self.apiService = apiService } func fetchUsers() { // použití apiService } } protocol APIServiceProtocol { // ... } -
Vstřikování přes vlastnost: Závislosti jsou nastavovány přes veřejné vlastnosti (často s použitím
@IBOutletnebo pokud je závislost volitelná).// Swift class UserController: UIViewController { var userFetcher: UserFetcherProtocol? // Závislost, která může být nastavena zvenčí override func viewDidLoad() { super.viewDidLoad() userFetcher?.fetchUsers() } } protocol UserFetcherProtocol { func fetchUsers() } -
Vstřikování přes metodu: Závislosti jsou předávány jako parametry metod.
// Swift class DataProcessor { func process(data: Data, using parser: DataParserProtocol) { // Závislost předána metodě parser.parse(data) } } protocol DataParserProtocol { func parse(_ data: Data) }
Tímto způsobem je inverze závislostí cílem (snížení vazby přes abstrakce), a vstřikování závislostí je prostředek (jeden ze způsobů, jak tohoto cíle dosáhnout).