Menu
Coddy logo textTech

Podsumowanie — pobieranie danych

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 81 z 110.

challenge icon

Wyzwanie

Łatwy

Zbudujmy 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 String o nazwie source, 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 zwraca Future<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 zwraca Future<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 zwraca Stream<String>. Powinna ona zwracać elementy dla identyfikatorów od 1 do count włącznie, używając metody fetchItem dla każdego z nich (oczekuj na pobranie każdego elementu przed jego zwróceniem)
  • 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ść przez fetchMultiple(3) i wyświetlić każdy element
    • Wyświetl pusty wiersz
    • Wyświetl All operations complete!

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

Poćwicz samodzielnie: Kompilator Dart online