Asılılıqların çevrilməsi ilə asılılıqların inyeksiyası arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Asılılığın Tərs Çevrilməsi (Dependency Inversion Principle) SOLID prinsiplerinden biridir və deyir:
- Yuxarı səviyyəli modullar aşağı səviyyəli modullardan asılı olmamalıdır. Hər ikisi abstraksiyalara asılı olmalıdır.
- Abstraksiyalar detallardan asılı olmamalıdır, detallər abstraksiyalara asılı olmalıdır.
Asılılıq İnjeksiyası (Dependency Injection, DI) bir dizayn nümunəsidir, bu asılılığın tərs çevrilməsinin ** həyata keçirilməsinin ** bir yoludur. Bu, asılılıqları (bir sinfə bağlı olan obyektlər) xaricdən ötürməyi, sinfin onları özünün yaratmaması ilə təmin edir.
Əsas fərqlər:
- DIC - dizayn prinsipi, DI - dizayn nümunəsi.
- DIC - yüksək və aşağı səviyyəli modullar arasındakı münasibətlərin necə olmalı olduğunu müəyyən edir (abstraksiyalara asılılıq).
- DI - bu münasibətləri həyata keçirmək üçün istifadə olunan metod. Bu, obyektə asılılıqları təmin etmək üçün konkret texnikadır.
Asılılıq İnjeksiyasının nümunələri:
-
Konstruktor vasitəsilə İnjeksiyası: Asılılıqlar konstruktor vasitəsilə ötürülür.
// Swift class UserFetcher { private let apiService: APIServiceProtocol // Abstraksiyadan asılılıq init(apiService: APIServiceProtocol) { // Konstruktor vasitəsilə İnjeksiyası self.apiService = apiService } func fetchUsers() { // apiService-dən istifadə } } protocol APIServiceProtocol { // ... } -
Xüsusiyyət vasitəsilə İnjeksiyası: Asılılıqlar ictimai xüsusiyyətlər vasitəsilə qurulur (tez-tez
@IBOutletistifadə edilir və ya asılılıq opsionaldır).// Swift class UserController: UIViewController { var userFetcher: UserFetcherProtocol? // Xaricdən qurula bilən asılılıq override func viewDidLoad() { super.viewDidLoad() userFetcher?.fetchUsers() } } protocol UserFetcherProtocol { func fetchUsers() } -
Yöntəm vasitəsilə İnjeksiyası: Asılılıqlar metodların parametrləri kimi ötürülür.
// Swift class DataProcessor { func process(data: Data, using parser: DataParserProtocol) { // Yöntəmə asılılığı ötürülür parser.parse(data) } } protocol DataParserProtocol { func parse(_ data: Data) }
Bu şəkildə, asılılığın tərs çevrilməsi (abstraksiyalar vasitəsilə əlaqənin azaldılması) məqsədidir və asılılıq injeksiyası bu məqsədə çatmaq üçün vasitədir (bu məqsədə çatmanın bir yoludur).