Récapitulatif - Data Fetcher
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 81 sur 110.
Défi
FacileConstruisons 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 classeDataFetcherqui simule la récupération de données à partir d'une source distante. Votre classe doit avoir :- Un champ
finalde typeStringnommésourcequi stocke la provenance des données - Un constructeur privé qui initialise la source
- Une méthode factory asynchrone statique
connect(String sourceName)qui retourne unFuture<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 unFuture<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 unStream<String>. Celle-ci doit produire (yield) des éléments pour les identifiants allant de 1 jusqu'àcountinclus, en utilisant votre méthodefetchItempour chacun d'eux (attendez chaque récupération avec await avant de produire le résultat)
- Un champ
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 forpour itérer à traversfetchMultiple(3)et afficher chaque élément - Affichez une ligne vide
- Affichez
All operations complete!
- Affichez
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
1Les bases de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesVariables d'instanceBases des constructeursRécapitulatif - Calculatrice simple4Null Safety
Introduction à la Null SafetyNullable vs Non-NullableLes opérateurs ? et !Le mot-clé late et la Null SafetyLes opérateurs Null-AwareLa Null Safety dans les classesRécapitulatif - Système de profil utilisateur7Classes abstraites et Interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémentation vs ExtensionInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et Génériques
Aperçu des List, Set et MapCollections Type-SafeClasses génériquesMéthodes génériquesContraintes de généricitéIterable & IteratorRécapitulatif - Stockage générique2Les constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs de redirectionRécapitulatif - Shape Builder5Encapsulation
Membres publics vs privésLa convention du préfixe _Visibilité au niveau de la bibliothèqueApprofondissement des Getters & SettersMasquage d'informationsRécapitulatif - Dossiers d'étudiants8Mixins
Introduction aux MixinsCréation de MixinsUtilisation de plusieurs MixinsLe mot-clé on dans les MixinsMixin vs HéritageMixin vs InterfaceRécapitulatif - Système Animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode & ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie3Propriétés de classe
Membres d'instance vs statiquesChamps Final & ConstVariables LateMéthodes et champs statiquesGetters et SettersRécapitulatif - Gestionnaire de compte bancaire6Héritage
Bases de l'héritageLe mot-clé superRedéfinition de méthodeL'annotation @overrideLe mot-clé final pour les classesConstructeurs et héritageRécapitulatif - Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification de type à l'exécutionLes opérateurs is & asMot-clé covariantRécapitulatif - Processeur de paiement12POO Asynchrone
Futures & async/awaitBases des StreamsStream ControllersConstructeurs asynchronesL'asynchrone dans les méthodes de classeRécapitulatif - Data Fetcher15Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository