Задача: разработать современное iOS-приложение для поиска новостей и историй из мира искусства, дизайна, скульптуры, выставок, живописи и современной культуры.
Требования:
• Просмотр актуальных новостей искусства и культуры
• Увлекательные истории о дизайне, скульптуре, выставках и живописи
• Бесконечная прокрутка с пагинацией
• Чтение в режиме Offline-first с локальным кэшированием новостей
• Сохранение статей и управление списком избранного
• Шаринг публикаций через нативное системное меню iOS (Share Sheet)
• Открытие оригинальных статей во встроенном браузере Safari
• Обновление контента потянув экран вниз (Pull-to-refresh)
• Обработка ошибок и экраны работы без интернета
• Адаптивный интерфейс на SwiftUI
• UX-ориентированный дизайн и четкая визуальная иерархия
Мной была предложена многоуровневая архитектура. Она необходима для разделения функциональности и упрощения тестирования и расширения кода.
Основные шаблоны и принципы, которые я использовала:
• MVVM — разделяет пользовательский интерфейс и логику представления
• Шаблон репозитория — абстрагирует источники данных от ViewModel
• Внедрение зависимостей — зависимости предоставляются извне, а не создаются внутри бизнес-логики
• Протоколоориентированный дизайн — упрощает создание моков и тестирование компонентов
• Подход «сначала офлайн» — ранее загруженный контент остается доступным без подключения к интернету
В результате получилось MVP проекта, которое будет дорабатываться и усовершенствоваться по мере расширения функциональности.
Был использован следующий стэк технологий:
• Swift
• SwiftUI
• Swift Concurrency (async/await)
• UIKit
• REST API
• MVVM
• Repository Pattern
• Dependency Injection
• UserDefaults
• JSON local storage
• URLSession