Итоги — Data Fetcher
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 81 из 110.
Задание
ЛегкоДавайте создадим класс DataFetcher, который объединит все концепции асинхронного ООП из этой главы! Вы создадите сервис данных, использующий асинхронную инициализацию, асинхронные методы для получения отдельных элементов и поток для доставки нескольких результатов с течением времени.
Вы организуете свой код в двух файлах:
data_fetcher.dart: Создайте классDataFetcher, который имитирует получение данных из удаленного источника. Ваш класс должен иметь:- Финализированное поле
Stringс именемsource, в котором хранится информация о том, откуда поступают данные - Приватный конструктор, который инициализирует источник
- Статический асинхронный фабричный метод
connect(String sourceName), который возвращаетFuture<DataFetcher>. Имитируйте задержку соединения в 100 миллисекунд, затем верните новый экземпляр с источником, установленным в предоставленное имя - Асинхронный метод
fetchItem(int id), который возвращаетFuture<String>. Имитируйте задержку в 50 миллисекунд, затем верните строку в формате:[source]-Item-[id] - Метод-генератор потока
fetchMultiple(int count), который возвращаетStream<String>. Он должен выдавать элементы для ID от 1 доcountвключительно, используя ваш методfetchItemдля каждого из них (ожидайте (await) каждое получение перед выдачей (yield))
- Финализированное поле
main.dart: Импортируйте ваш загрузчик данных и продемонстрируйте совместную работу всех трех асинхронных паттернов:- Выведите
Connecting to data source... - Используйте асинхронную фабрику для подключения к источнику с именем
CloudDB - Выведите
Connected to [source], используя поле source загрузчика - Выведите пустую строку
- Выведите
Fetching single item: - Получите и выведите элемент с ID
42 - Выведите пустую строку
- Выведите
Fetching multiple items: - Используйте
await forдля итерации поfetchMultiple(3)и вывода каждого элемента - Выведите пустую строку
- Выведите
All operations complete!
- Выведите
Этот челлендж сочетает в себе паттерн статической асинхронной фабрики для инициализации, обычные асинхронные методы для одиночных операций и 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: Используйте асинхронную фабрику для подключения к источнику с именем '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!'
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий