Menu
Coddy logo textTech

Récapitulatif - Data Fetcher

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 81 sur 110.

challenge icon

Défi

Facile

Construisons une classe DataFetcher qui rassemble tous les concepts de POO asynchrone de ce chapitre ! Vous allez créer un service de données qui utilise l'initialisation asynchrone, des méthodes asynchrones pour récupérer des éléments individuels et un flux (stream) pour livrer plusieurs résultats au fil du temps.

Vous organiserez votre code en deux fichiers :

  • data_fetcher.dart : Créez une classe DataFetcher qui simule la récupération de données à partir d'une source distante. Votre classe doit avoir :
    • Un champ final de type String nommé source qui stocke la provenance des données
    • Un constructeur privé qui initialise la source
    • Une méthode factory asynchrone statique connect(String sourceName) qui retourne un Future<DataFetcher>. Simulez un délai de connexion de 100 millisecondes, puis retournez une nouvelle instance avec la source définie sur le nom fourni
    • Une méthode asynchrone fetchItem(int id) qui retourne un Future<String>. Simulez un délai de 50 millisecondes, puis retournez une chaîne au format : [source]-Item-[id]
    • Une méthode génératrice de flux fetchMultiple(int count) qui retourne un Stream<String>. Celle-ci doit produire (yield) des éléments pour les identifiants allant de 1 jusqu'à count inclus, en utilisant votre méthode fetchItem pour chacun d'eux (attendez chaque récupération avec await avant de produire le résultat)
  • main.dart : Importez votre récupérateur de données et démontrez le fonctionnement conjoint des trois modèles asynchrones :
    • Affichez Connecting to data source...
    • Utilisez la factory asynchrone pour vous connecter à une source nommée CloudDB
    • Affichez Connected to [source] en utilisant le champ source du fetcher
    • Affichez une ligne vide
    • Affichez Fetching single item:
    • Récupérez et affichez l'élément avec l'ID 42
    • Affichez une ligne vide
    • Affichez Fetching multiple items:
    • Utilisez await for pour itérer à travers fetchMultiple(3) et afficher chaque élément
    • Affichez une ligne vide
    • Affichez All operations complete!

Ce défi combine le modèle de factory asynchrone statique pour l'initialisation, les méthodes asynchrones régulières pour les opérations uniques, et async* avec yield pour la diffusion de résultats multiples. Remarquez comment la méthode de flux peut appeler d'autres méthodes asynchrones en interne !

Sortie attendue :

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!

Essayez vous-même

import 'data_fetcher.dart';

void main() async {
  // TODO: Afficher 'Connecting to data source...'
  
  // TODO: Utiliser la factory asynchrone pour se connecter à une source nommée 'CloudDB'
  
  // TODO: Afficher 'Connected to [source]' en utilisant le champ source du fetcher
  
  // TODO: Afficher une ligne vide
  
  // TODO: Afficher 'Fetching single item:'
  
  // TODO: Récupérer et afficher l'élément avec l'ID 42
  
  // TODO: Afficher une ligne vide
  
  // TODO: Afficher 'Fetching multiple items:'
  
  // TODO: Utiliser 'await for' pour itérer à travers fetchMultiple(3) et afficher chaque élément
  
  // TODO: Afficher une ligne vide
  
  // TODO: Afficher 'All operations complete!'
}

Toutes les leçons de Programmation Orientée Objet