Menu
Coddy logo textTech

Zusammenfassung – Data Fetcher

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 81 von 110.

challenge icon

Aufgabe

Einfach

Lassen Sie uns eine DataFetcher-Klasse erstellen, die alle asynchronen OOP-Konzepte aus diesem Kapitel vereint! Sie werden einen Datendienst erstellen, der asynchrone Initialisierung, asynchrone Methoden zum Abrufen einzelner Elemente und einen Stream zur Bereitstellung mehrerer Ergebnisse über die Zeit verwendet.

Sie werden Ihren Code in zwei Dateien organisieren:

  • data_fetcher.dart: Erstellen Sie eine DataFetcher-Klasse, die das Abrufen von Daten von einer Remote-Quelle simuliert. Ihre Klasse sollte Folgendes haben:
    • Ein finales String-Feld namens source, das speichert, woher die Daten kommen
    • Einen privaten Konstruktor, der die Quelle initialisiert
    • Eine statische asynchrone Factory-Methode connect(String sourceName), die ein Future<DataFetcher> zurückgibt. Simulieren Sie eine Verbindungsverzögerung von 100 Millisekunden und geben Sie dann eine neue Instanz zurück, bei der die Quelle auf den angegebenen Namen gesetzt ist
    • Eine asynchrone Methode fetchItem(int id), die ein Future<String> zurückgibt. Simulieren Sie eine Verzögerung von 50 Millisekunden und geben Sie dann einen String im Format [source]-Item-[id] zurück
    • Eine Stream-Generator-Methode fetchMultiple(int count), die einen Stream<String> zurückgibt. Diese sollte Elemente für IDs von 1 bis einschließlich count liefern, wobei für jedes Element Ihre fetchItem-Methode verwendet wird (warten Sie mit await auf jeden Abruf, bevor Sie das Ergebnis mit yield liefern)
  • main.dart: Importieren Sie Ihren Data Fetcher und demonstrieren Sie das Zusammenspiel aller drei asynchronen Muster:
    • Geben Sie Connecting to data source... aus
    • Verwenden Sie die asynchrone Factory, um eine Verbindung zu einer Quelle namens CloudDB herzustellen
    • Geben Sie Connected to [source] unter Verwendung des Quellfelds des Fetchers aus
    • Geben Sie eine Leerzeile aus
    • Geben Sie Fetching single item: aus
    • Rufen Sie das Element mit der ID 42 ab und geben Sie es aus
    • Geben Sie eine Leerzeile aus
    • Geben Sie Fetching multiple items: aus
    • Verwenden Sie await for, um über fetchMultiple(3) zu iterieren und jedes Element auszugeben
    • Geben Sie eine Leerzeile aus
    • Geben Sie All operations complete! aus

Diese Herausforderung kombiniert das statische asynchrone Factory-Muster für die Initialisierung, reguläre asynchrone Methoden für Einzeloperationen und async* mit yield für das Streaming mehrerer Ergebnisse. Beachten Sie, wie die Stream-Methode intern andere asynchrone Methoden aufrufen kann!

Erwartete Ausgabe:

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!

Probier es selbst

import 'data_fetcher.dart';

void main() async {
  // TODO: 'Connecting to data source...' ausgeben
  
  // TODO: Die async factory verwenden, um eine Verbindung zu einer Quelle namens 'CloudDB' herzustellen
  
  // TODO: 'Connected to [source]' unter Verwendung des source-Feldes des fetcher ausgeben
  
  // TODO: Eine Leerzeile ausgeben
  
  // TODO: 'Fetching single item:' ausgeben
  
  // TODO: Das Element mit der ID 42 abrufen und ausgeben
  
  // TODO: Eine Leerzeile ausgeben
  
  // TODO: 'Fetching multiple items:' ausgeben
  
  // TODO: 'await for' verwenden, um über fetchMultiple(3) zu iterieren und jedes Element auszugeben
  
  // TODO: Eine Leerzeile ausgeben
  
  // TODO: 'All operations complete!' ausgeben
}

Alle Lektionen in Objektorientierte Programmierung