Middle
Ինչ կարող եք ասել SOLID-ի սկզբունքի D մասին։
sobes.tech AI
Պատասխան AI-ից
Dependency Inversion Principle (DIP) նշում է,
- վերևի մակարդակի մոդուլները չպետք է կախված լինեն ստորին մակարդակի մոդուլներից: Երկուսն էլ պետք է կախված լինեն աբստրակցիաներից:
- աբստրակցիաները չպետք է կախված լինեն մանրամասներից: Մանրամասները պետք է կախված լինեն աբստրակցիաներից:
SOLID-ի D նպատակն է բարձր մակարդակի քաղաքականությունների և ցածր մակարդակի իրագործման միջև decoupling (վերամեկուսացում): Փոխարենը, բարձր մակարդակի մոդուլը ուղղակիորեն կախված չէ ցածր մակարդակի մոդուլից կոնկրետ իրագործումից, երկուսն էլ կախված են ընդհանուր ինտերֆեյսից կամ աբստրակտ դասից: Սա մեծացնում է ճկունությունը, թեստավորման հեշտությունը և կոդի պահպանելիությունը:
Flutter-ում դա հաճախ արտահայտվում է աբստրակտ դասերի կամ միկսինների օգտագործմամբ պայմանագրեր սահմանելու համար, որոնք ապա իրականացնում են կոնկրետ դասերը: Օրինակ, տվյալների հետ աշխատելիս:
// Աբստրակցիա
abstract class DataService {
Future<List<String>> getData();
}
// Ներքևի մակարդակի իրագործում (կոնկրետ մանրամասն)
class ApiDataService implements DataService {
@override
Future<List<String>> getData() async {
// API-ից տվյալների ստացման լոգիկա
return ['API Data 1', 'API Data 2'];
}
}
// Ներքևի մակարդակի իրագործում (այլ կոնկրետ մանրամասն)
class LocalDataService implements DataService {
@override
Future<List<String>> getData() async {
// Տեղական պահոցից տվյալների ստացման լոգիկա
return ['Local Data 1', 'Local Data 2'];
}
}
// Բարձր մակարդակի մոդուլ, որը կախված է աբստրակցիայից, ոչ թե մանրամասներից
class DataManager {
final DataService _dataService; // Կապվածություն աբստրակցիայից
DataManager(this._dataService); // Կապվածության ներդրում (ինվերտոր)
Future<List<String>> fetchData() {
return _dataService.getData();
}
}
// Օգտագործում
void main() {
final apiService = ApiDataService();
final localService = LocalDataService();
final apiManager = DataManager(apiService); // Ինյեկցիա ApiDataService
final localManager = DataManager(localService); // Ինյեկցիա LocalDataService
// ... օգտագործում apiManager կամ localManager
}