Ответ
Data Source и Data Service — это разные паттерны с различными целями в iOS-разработке. Их часто путают из-за схожих названий.
| Аспект | Data Source | Data Service |
|---|---|---|
| Назначение | Поставщик данных для UI-компонентов (таблицы, коллекции). Отвечает на вопросы "сколько?" и "что показывать?". | Абстрактный слой для операций с данными. Отвечает за получение, сохранение и преобразование данных из/в различные источники. |
| Контекст | UIKit / SwiftUI (протоколы UITableViewDataSource, UICollectionViewDataSource). |
Архитектура приложения (слой доменной логики или инфраструктуры). |
| Ответственность | 1. Количество секций и ячеек. 2. Конфигурация view для конкретного IndexPath.3. Управление заголовками. |
1. Сетевые запросы. 2. Работа с БД (Core Data). 3. Кэширование. 4. Преобразование моделей. 5. Обработка ошибок. |
| Типичная реализация | Класс, соответствующий протоколу UIKit, или DiffableDataSource. |
Класс или структура, часто скрытая за протоколом (например, ItemsRepository). |
Взаимодействие в архитектуре:
// Data Service получает "сырые" данные
class ProductService {
func loadProducts() async -> [Product] { /* сеть/БД */ }
}
// ViewModel преобразует данные и хранит состояние
class ProductListViewModel {
@Published var products: [ProductViewModel] = []
private let service: ProductService
func load() { /* вызывает service, маппит в ProductViewModel */ }
}
// Data Source использует подготовленные данные для UI
class ProductDataSource: UITableViewDiffableDataSource<Section, ProductViewModel> {
// Настраивает ячейки на основе ProductViewModel
}
// ViewController связывает ViewModel и DataSource
Ключевой вывод: Data Source — это мост между данными и конкретным UI-виджетом. Data Service — это мост между приложением и внешними источниками данных (сеть, БД).