Menu
Coddy logo textTech

סיכום - אחזור נתונים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 81 מתוך 110.

challenge icon

אתגר

קל

בואו נבנה מחלקת DataFetcher שמאגדת את כל המושגים של OOP אסינכרוני מהפרק הזה! תיצרו שירות נתונים שמשתמש באתחול אסינכרוני, בשיטות אסינכרוניות לשליפת פריטים בודדים ובזרם למסירת כמה תוצאות לאורך זמן.

תארגנו את הקוד בשני קבצים:

  • data_fetcher.dart: צרו מחלקת DataFetcher המדמה שליפת נתונים ממקור מרוחק. למחלקה צריכים להיות:
    • שדה String סופי בשם source ששומר מהיכן מגיעים הנתונים
    • בנאי פרטי שמאתחל את המקור
    • שיטת factory סטטית אסינכרונית connect(String sourceName) שמחזירה Future<DataFetcher>. הדמו עיכוב התחברות של 100 מילישניות, ואז החזירו מופע חדש שהמקור שלו מוגדר לשם שסופק
    • שיטה אסינכרונית fetchItem(int id) שמחזירה Future<String>. הדמו עיכוב של 50 מילישניות, ואז החזירו מחרוזת בתבנית: [source]-Item-[id]
    • שיטת מחולל זרם fetchMultiple(int count) שמחזירה Stream<String>. היא צריכה להפיק פריטים עבור מזהים מ-1 ועד count כולל, באמצעות השיטה fetchItem שלכם לכל אחד מהם (המתינו לכל שליפה לפני הפקת הפריט)
  • main.dart: ייבאו את שולף הנתונים שלכם והדגימו כיצד שלושת הדפוסים האסינכרוניים פועלים יחד:
    • הדפיסו Connecting to data source...
    • השתמשו ב-factory האסינכרוני כדי להתחבר למקור בשם CloudDB
    • הדפיסו Connected to [source] באמצעות שדה המקור של שולף הנתונים
    • הדפיסו שורה ריקה
    • הדפיסו Fetching single item:
    • שלפו והדפיסו את הפריט שמזההו 42
    • הדפיסו שורה ריקה
    • הדפיסו Fetching multiple items:
    • השתמשו ב-await for כדי לעבור על fetchMultiple(3) ולהדפיס כל פריט
    • הדפיסו שורה ריקה
    • הדפיסו All operations complete!

האתגר הזה משלב את דפוס ה-factory הסטטי האסינכרוני לאתחול, שיטות אסינכרוניות רגילות לפעולות בודדות, ואת async* עם yield להזרמת כמה תוצאות. שימו לב ששיטת הזרם יכולה לקרוא לשיטות אסינכרוניות אחרות מבפנים!

פלט צפוי:

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!

נסו בעצמכם

import 'data_fetcher.dart';

void main() async {
  // TODO: הדפס את 'Connecting to data source...'
  
  // TODO: השתמש ב-factory האסינכרוני כדי להתחבר למקור בשם 'CloudDB'
  
  // TODO: הדפס את 'Connected to [source]' באמצעות השדה source של fetcher
  
  // TODO: הדפס שורה ריקה
  
  // TODO: הדפס את 'Fetching single item:'
  
  // TODO: אחזר והדפס את הפריט עם ID 42
  
  // TODO: הדפס שורה ריקה
  
  // TODO: הדפס את 'Fetching multiple items:'
  
  // TODO: השתמש ב-'await for' כדי לעבור על הפריטים שמחזירה fetchMultiple(3) ולהדפיס כל אחד מהם
  
  // TODO: הדפס שורה ריקה
  
  // TODO: הדפס את 'All operations complete!'
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Dart אונליין