Riepilogo - Recupero dei dati
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 81 di 110.
Sfida
FacileCostruiamo 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 classeDataFetcherche simula il recupero di dati da una sorgente remota. La classe deve avere:- Un campo
Stringfinal chiamatosourceche memorizza la provenienza dei dati - Un costruttore privato che inizializza la sorgente
- Un metodo factory statico asincrono
connect(String sourceName)che restituisce unFuture<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 unFuture<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 unStream<String>. Deve generare elementi con ID da 1 fino acountincluso, usando il metodofetchItemper ciascuno (attendi ogni recupero prima di generare l’elemento)
- Un campo
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 forper scorrerefetchMultiple(3)e stampare ogni elemento - Stampa una riga vuota
- Stampa
All operations complete!
- Stampa
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
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online