Podsumowanie — pobieranie danych
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 81 z 110.
Wyzwanie
ŁatwyZbudujmy klasę DataFetcher, która łączy wszystkie koncepcje asynchronicznego OOP z tego rozdziału! Utworzysz usługę danych, która używa asynchronicznej inicjalizacji, asynchronicznych metod do pobierania poszczególnych elementów oraz strumienia do dostarczania wielu wyników w czasie.
Uporządkujesz swój kod w dwóch plikach:
data_fetcher.dart: Utwórz klasęDataFetcher, która symuluje pobieranie danych ze zdalnego źródła. Twoja klasa powinna mieć:- Końcowe pole typu
Stringo nazwiesource, które przechowuje informację o tym, skąd pochodzą dane - Prywatny konstruktor, który inicjalizuje źródło
- Statyczną asynchroniczną metodę fabrykującą
connect(String sourceName), która zwracaFuture<DataFetcher>. Zasymuluj opóźnienie połączenia wynoszące 100 milisekund, a następnie zwróć nową instancję ze źródłem ustawionym na podaną nazwę - Asynchroniczną metodę
fetchItem(int id), która zwracaFuture<String>. Zasymuluj opóźnienie wynoszące 50 milisekund, a następnie zwróć ciąg znaków w formacie:[source]-Item-[id] - Metodę generatora strumienia
fetchMultiple(int count), która zwracaStream<String>. Powinna ona zwracać elementy dla identyfikatorów od 1 docountwłącznie, używając metodyfetchItemdla każdego z nich (oczekuj na pobranie każdego elementu przed jego zwróceniem)
- Końcowe pole typu
main.dart: Zaimportuj moduł pobierania danych i pokaż, jak współdziałają wszystkie trzy wzorce asynchroniczne:- Wyświetl
Connecting to data source... - Użyj asynchronicznej metody fabrykującej, aby połączyć się ze źródłem o nazwie
CloudDB - Wyświetl
Connected to [source], używając pola source pobieracza danych - Wyświetl pusty wiersz
- Wyświetl
Fetching single item: - Pobierz i wyświetl element o ID
42 - Wyświetl pusty wiersz
- Wyświetl
Fetching multiple items: - Użyj
await for, aby przejść przezfetchMultiple(3)i wyświetlić każdy element - Wyświetl pusty wiersz
- Wyświetl
All operations complete!
- Wyświetl
To wyzwanie łączy statyczny asynchroniczny wzorzec fabrykujący do inicjalizacji, zwykłe metody asynchroniczne do pojedynczych operacji oraz async* z yield do strumieniowego przesyłania wielu wyników. Zwróć uwagę, że metoda strumienia może wewnętrznie wywoływać inne metody asynchroniczne!
Oczekiwany wynik:
Connecting to data source...
Connected to CloudDB
Fetching single item:
CloudDB-Item-42
Fetching multiple items:
CloudDB-Item-1
CloudDB-Item-2
CloudDB-Item-3
All operations complete!Spróbuj swoich sił
import 'data_fetcher.dart';
void main() async {
// TODO: Wypisz 'Connecting to data source...'
// TODO: Użyj asynchronicznej metody fabrykującej, aby połączyć się ze źródłem o nazwie 'CloudDB'
// TODO: Wypisz 'Connected to [source]', używając pola source obiektu fetcher
// TODO: Wypisz pustą linię
// TODO: Wypisz 'Fetching single item:'
// TODO: Pobierz i wypisz element o ID 42
// TODO: Wypisz pustą linię
// TODO: Wypisz 'Fetching multiple items:'
// TODO: Użyj 'await for', aby przejść przez elementy zwracane przez fetchMultiple(3) i wypisać każdy z nich
// TODO: Wypisz pustą linię
// TODO: Wypisz 'All operations complete!'
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatności12Asynchroniczne OOP
Futures i async/awaitPodstawy strumieniKontrolery strumieniKonstruktory asynchroniczneAsynchroniczność w metodach klasyPodsumowanie — pobieranie danychPoćwicz samodzielnie: Kompilator Dart online