Junior
V čom spočíva podstata abstrakcie?
sobes.tech AI
Odpoveď od AI
Abstrakcia vo Flutteri, ako aj v programovaní všeobecne, sa zameri na zakrytie zložitej implementácie a poskytnutie zjednodušeného rozhrania na interakciu. Toho sa dosahuje vytvorením vysokorozmerných zobrazení, ktoré zakrývajú nižšie vrstvy a umožňujú pracovať s konceptmi, nie s konkrétnou implementáciou.
Hlavné myšlienky:
- Zakrytie detailov: Zložitá logika alebo štruktúra dát je zakrytá za jednoduchým rozhraním.
- Zjednodušenie použitia: Vývojár komunikuje s abstraktným zobrazením, nezapájajúc sa do detailov implementácie.
- Zvýšenie flexibility: Zmena vnútornej implementácie neovplyvňuje kód, ktorý používa abstrakciu, pokiaľ rozhranie zostáva rovnaké.
- Zvýšenie opakovanej použiteľnosti: Abstraktné komponenty môžu byť použité v rôznych častiach aplikácie.
Príklady vo Flutteri:
- Widgety: Widgety sú abstrakcie nad prvkami používateľského rozhrania. Používame
Container,Row,Columna ďalšie, nepoznajúc ich vnútornú implementáciu. - Asynchrónne programovanie:
FutureaStreamabstrahujú prácu s asynchrónnymi operáciami, zakrývajúc detaily práce s tokmi a udalosťami. - Architektonické vzory: Použitie vzorov ako BLoC, Provider alebo Riverpod, predstavuje formu abstrakcie, rozdeľujúcu UI a biznis logiku.
Príklad kódu s použitím abstrakcie:
// Abstraktná trieda pre zdroj dát
abstract class DataSource {
Future<String> fetchData();
}
// Implementácia využívajúca HTTP
class HttpDataSource implements DataSource {
@override
Future<String> fetchData() async {
// Tu zložitá logika práce s HTTP požiadavkou
return "Dáta z HTTP";
}
}
// Implementácia využívajúca lokálne úložisko
class LocalDataSource implements DataSource {
@override
Future<String> fetchData() async {
// Tu zložitá logika práce s lokálnym úložiskom
return "Dáta z lokálneho úložiska";
}
}
// Trieda využívajúca abstrakciu DataSource
class Repository {
final DataSource dataSource;
Repository(this.dataSource);
Future<String> getData() {
return dataSource.fetchData();
}
}
V tomto príklade Repository komunikuje iba s abstrakciou DataSource, nezaujíma sa o to, odkiaľ presne prichádzajú dáta (HTTP, lokálne úložisko atď.). To umožňuje ľahko meniť zdroj dát, bez zmeny kódu Repository.