Изучение
Контракты DataSource
Узкие контракты источников и разрешение ровно одной реализации по совместимому типу.
v0.1.0-dev.1Средний уровеньark_data_layer
Контракты DataSource
Предпочитайте отдельный контракт для каждой технической ответственности:
dart
abstract interface class CatalogRemoteDataSource implements DataSource {
Future<CatalogResponseDto> fetchCatalog();
}
abstract interface class CatalogCacheDataSource implements DataSource {
Future<CatalogCacheDto?> readCatalog();
Future<void> writeCatalog(CatalogCacheDto data);
}
DataSourceContainer копирует переданный набор и разрешает зависимости по правилам совместимости типов Dart.
| Совпадения | Результат |
|---|---|
| 0 | DataSourceNotFoundException |
| 1 | найденный объект |
| 2 и более | AmbiguousDataSourceException |
Явная ошибка неоднозначности не позволяет порядку регистрации незаметно выбирать способ хранения. Если remote и local источники выполняют разные задачи, задайте разные интерфейсы вместо строкового ключа режима.