Menu
Coddy logo textTech

Özet - Data Fetcher

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 81 / 110.

challenge icon

Görev

Kolay

Bu bölümdeki tüm asenkron OOP kavramlarını bir araya getiren bir DataFetcher sınıfı oluşturalım! Asenkron başlatma, tekil öğeleri getirmek için asenkron metotlar ve zaman içinde birden fazla sonuç sunmak için bir akış (stream) kullanan bir veri servisi oluşturacaksınız.

Kodunuzu iki dosyada organize edeceksiniz:

  • data_fetcher.dart: Uzak bir kaynaktan veri çekmeyi simüle eden bir DataFetcher sınıfı oluşturun. Sınıfınız şunlara sahip olmalıdır:
    • Verinin nereden geldiğini saklayan source adında final bir String alanı
    • Kaynağı başlatan özel (private) bir yapıcı (constructor)
    • Bir Future<DataFetcher> döndüren statik asenkron fabrika metodu connect(String sourceName). 100 milisaniyelik bir bağlantı gecikmesi simüle edin, ardından kaynağı verilen isme ayarlanmış yeni bir örnek döndürün
    • Bir Future<String> döndüren asenkron fetchItem(int id) metodu. 50 milisaniyelik bir gecikme simüle edin, ardından şu formatta bir dize döndürün: [source]-Item-[id]
    • Bir Stream<String> döndüren akış oluşturucu (stream generator) metodu fetchMultiple(int count). Bu metot, her biri için fetchItem metodunuzu kullanarak (her bir getirme işlemini yield etmeden önce await ederek) 1'den count değerine kadar (dahil) olan ID'ler için öğeler üretmelidir (yield)
  • main.dart: Veri getiricinizi (data fetcher) içe aktarın ve üç asenkron desenin birlikte çalışmasını gösterin:
    • Connecting to data source... yazdırın
    • CloudDB adlı bir kaynağa bağlanmak için asenkron fabrika metodunu kullanın
    • Getiricinin source alanını kullanarak Connected to [source] yazdırın
    • Boş bir satır yazdırın
    • Fetching single item: yazdırın
    • ID'si 42 olan öğeyi getirin ve yazdırın
    • Boş bir satır yazdırın
    • Fetching multiple items: yazdırın
    • fetchMultiple(3) üzerinde dönmek ve her öğeyi yazdırmak için await for kullanın
    • Boş bir satır yazdırın
    • All operations complete! yazdırın

Bu meydan okuma; başlatma için statik asenkron fabrika desenini, tekil işlemler için normal asenkron metotları ve birden fazla sonucu akışla iletmek için async* ile yield kullanımını birleştirir. Akış metodunun kendi içinde diğer asenkron metotları nasıl çağırabildiğine dikkat edin!

Beklenen çıktı:

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!

Kendin dene

import 'data_fetcher.dart';

void main() async {
  // TODO: 'Connecting to data source...' yazdırın
  
  // TODO: 'CloudDB' adlı bir kaynağa bağlanmak için async factory kullanın
  
  // TODO: fetcher'ın source alanını kullanarak 'Connected to [source]' yazdırın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: 'Fetching single item:' yazdırın
  
  // TODO: ID'si 42 olan öğeyi getirin ve yazdırın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: 'Fetching multiple items:' yazdırın
  
  // TODO: fetchMultiple(3) üzerinden yineleme yapmak ve her bir öğeyi yazdırmak için 'await for' kullanın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: 'All operations complete!' yazdırın
}

Nesne Yönelimli Programlama bölümündeki tüm dersler