Menu
Coddy logo textTech

Riepilogo - Recupero dei dati

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 81 di 110.

challenge icon

Sfida

Facile

Costruiamo una classe DataFetcher che riunisce tutti i concetti di OOP asincrona di questo capitolo! Creerai un servizio dati che usa l’inizializzazione asincrona, metodi asincroni per recuperare singoli elementi e uno stream per fornire più risultati nel tempo.

Organizzerai il codice in due file:

  • data_fetcher.dart: crea una classe DataFetcher che simula il recupero di dati da una sorgente remota. La classe deve avere:
    • Un campo String final chiamato source che memorizza la provenienza dei dati
    • Un costruttore privato che inizializza la sorgente
    • Un metodo factory statico asincrono connect(String sourceName) che restituisce un Future<DataFetcher>. Simula un ritardo di connessione di 100 millisecondi, quindi restituisci una nuova istanza con la sorgente impostata sul nome fornito
    • Un metodo asincrono fetchItem(int id) che restituisce un Future<String>. Simula un ritardo di 50 millisecondi, quindi restituisci una stringa nel formato: [source]-Item-[id]
    • Un metodo generatore di stream fetchMultiple(int count) che restituisce un Stream<String>. Deve generare elementi con ID da 1 fino a count incluso, usando il metodo fetchItem per ciascuno (attendi ogni recupero prima di generare l’elemento)
  • main.dart: importa il tuo recuperatore di dati e mostra come funzionano insieme tutti e tre i modelli asincroni:
    • Stampa Connecting to data source...
    • Usa il metodo factory asincrono per connetterti a una sorgente chiamata CloudDB
    • Stampa Connected to [source] usando il campo source del recuperatore
    • Stampa una riga vuota
    • Stampa Fetching single item:
    • Recupera e stampa l’elemento con ID 42
    • Stampa una riga vuota
    • Stampa Fetching multiple items:
    • Usa await for per scorrere fetchMultiple(3) e stampare ogni elemento
    • Stampa una riga vuota
    • Stampa All operations complete!

Questa sfida combina il modello factory statico asincrono per l’inizializzazione, i normali metodi asincroni per le singole operazioni e async* con yield per trasmettere più risultati. Nota come il metodo dello stream possa chiamare al suo interno altri metodi asincroni!

Output previsto:

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!

Provalo tu

import 'data_fetcher.dart';

void main() async {
  // TODO: Stampa 'Connecting to data source...'
  
  // TODO: Usa la factory asincrona per connetterti a una sorgente chiamata 'CloudDB'
  
  // TODO: Stampa 'Connected to [source]' usando il campo source del fetcher
  
  // TODO: Stampa una riga vuota
  
  // TODO: Stampa 'Fetching single item:'
  
  // TODO: Recupera e stampa l'elemento con ID 42
  
  // TODO: Stampa una riga vuota
  
  // TODO: Stampa 'Fetching multiple items:'
  
  // TODO: Usa 'await for' per iterare su fetchMultiple(3) e stampare ogni elemento
  
  // TODO: Stampa una riga vuota
  
  // TODO: Stampa 'All operations complete!'
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online