Menu
Coddy logo textTech

Zusammenfassung – Datenabruf

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

challenge icon

Aufgabe

Einfach

Erstelle eine DataFetcher-Klasse, die alle asynchronen OOP-Konzepte aus diesem Kapitel zusammenführt! Du erstellst einen Datendienst, der eine asynchrone Initialisierung, asynchrone Methoden zum Abrufen einzelner Elemente und einen Stream zum Übermitteln mehrerer Ergebnisse im Laufe der Zeit verwendet.

Du organisierst deinen Code in zwei Dateien:

  • data_fetcher.dart: Erstelle eine DataFetcher-Klasse, die das Abrufen von Daten aus einer entfernten Quelle simuliert. Deine Klasse sollte Folgendes enthalten:
    • Ein finales String-Feld namens source, das speichert, woher die Daten stammen
    • Einen privaten Konstruktor, der die Quelle initialisiert
    • Eine statische asynchrone Factory-Methode connect(String sourceName), die ein Future<DataFetcher> zurückgibt. Simuliere eine Verbindungsverzögerung von 100 Millisekunden und gib anschließend eine neue Instanz zurück, deren Quelle auf den bereitgestellten Namen gesetzt ist
    • Eine asynchrone Methode fetchItem(int id), die ein Future<String> zurückgibt. Simuliere eine Verzögerung von 50 Millisekunden und gib anschließend einen String im Format [source]-Item-[id] zurück
    • Eine Stream-Generator-Methode fetchMultiple(int count), die einen Stream<String> zurückgibt. Sie soll Elemente für IDs von 1 bis einschließlich count liefern, wobei für jedes Element deine Methode fetchItem verwendet wird (warte vor dem Liefern jedes Elements den jeweiligen Abruf ab)
  • main.dart: Importiere deinen Daten-Abrufdienst und zeige, wie alle drei asynchronen Muster zusammenarbeiten:
    • Gib Connecting to data source... aus
    • Verwende die asynchrone Factory, um eine Verbindung zu einer Quelle namens CloudDB herzustellen
    • Gib Connected to [source] aus und verwende dabei das Quellenfeld des Daten-Abrufdienstes
    • Gib eine leere Zeile aus
    • Gib Fetching single item: aus
    • Rufe das Element mit der ID 42 ab und gib es aus
    • Gib eine leere Zeile aus
    • Gib Fetching multiple items: aus
    • Verwende await for, um durch fetchMultiple(3) zu iterieren, und gib jedes Element aus
    • Gib eine leere Zeile aus
    • Gib All operations complete! aus

Diese Aufgabe kombiniert das statische asynchrone Factory-Muster zur Initialisierung, reguläre asynchrone Methoden für einzelne Vorgänge sowie async* mit yield zum Streamen mehrerer Ergebnisse. Beachte, 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

Übe selbstständig: Online-Dart-Compiler