Эта библиотечка состоит из набора сущностей и декораторов (кирпичиков), с помощью которых можно строить различную логику загркзыи и кэширования данных. В ее основе лежат два протокола: Query и FailableQuery. Остальные компоненты библиотеки реализуют один из них и предоставляют расширения этих протоколов для того чтобы можно было выстраивать сложные сервисы используя непрерывную dot-нотацию
Простой пример:
static func simpleModelLoader() -> any FailableQuery {
let dto = DTO(value: UUID())
// Загрузить DTO используя DTOLoader и выполнить маппинг DTO на модель
return DTOLoader(dto: dto).map(with: DTO.toModel)
}Чуть сложнее:
static func modelLoaderWithInMemoryCache() -> any FailableQuery {
let dto = DTO(value: UUID())
let storage = InMemoryStorage<Model>().asQuery()
// Начинаем с получения данных из кэша в памяти (storage)
return storage
// Применяем к нему политику валидации TimeIntervalValidationPolicy
.expiring(validationPolicy: TimeIntervalValidationPolicy())
// Если кэш невалиден, запускается вторая ветка
.fallback(
// Загружается DTO
DTOLoader(dto: dto)
// DTO маппится в модель
.map(with: DTO.toModel)
// модель сохраняется в InMemoryStorage
.store(into: storage)
)
}