Разработчикам - Maksoha/Locket GitHub Wiki
Структура проекта
Проект организован в несколько модулей:
- app: Основной модуль приложения, содержащий точку входа приложения и настройку DI;
- feature_camera_preview: Модуль, отвечающий за функциональность камеры;
- feature_editor: Функции редактирования изображений/контента;
- feature_feed: Функциональность ленты контента и отображение;
- core_ui: Общие UI-компоненты и ресурсы;
- domain: Бизнес-логика и сценарии использования;
- data: Реализация слоя данных;
- background_worker: Обработка фоновых задач;
- navigation: Компоненты навигации и маршрутизация; coroutines: Утилиты и расширения для корутин.
Технический стек
Основные технологии
Язык: Kotlin;
Минимальный SDK: 29;
Целевой SDK: 35;
Система сборки: Gradle с использованием Kotlin DSL.
Основные зависимости
UI-фреймворк: Jetpack Compose с Material 3;
Компоненты архитектуры:
- ViewModel;
- Navigation Compose;
- WorkManager для фоновых задач;
Внедрение зависимостей: Dagger;
Управление состоянием: Kotlin Flow и StateFlow;
Коллекции: Kotlinx Immutable Collections.
Инструкции по настройке
- Клонируйте репозиторий;
- Откройте проект в Android Studio;
- Синхронизируйте проект с файлами Gradle;
- Запустите приложение на эмуляторе или физическом устройстве (Android 10 или выше).
Варианты сборки
Debug: Сборка для разработки с включенной отладкой;
Release: Продуктовая сборка с оптимизацией.
Архитектура
Приложение следует принципам Чистой Архитектуры с следующими слоями:
- Слой Представления (UI):
- Компоненты UI Compose;
- ViewModels;
- Управление состоянием UI.
- Слой Домен:
- Сценарии использования;
- Бизнес-логика;
- Модели домена.
- Слой Данных:
- Репозитории;
- Источники данных;
- Модели данных.
Функции
- Функциональность камеры;
- Редактирование изображений/контента;
- Лента контента;
- Функционал подписки;
- Включение вспышки;
- Аутентификация;
- Добавление описания к изображениям.
Руководства по разработке
Стиль кода
- Следуйте соглашениям по кодированию Kotlin;
- Используйте значимые имена для функций и переменных;
- Пишите документацию для публичных API;
- Включайте модульные тесты для бизнес-логики.
Гит-рабочий процесс
- Используйте feature-ветки для нового развития;
- Отправляйте изменения через pull-запросы;
- Сохраняйте коммиты сфокусированными и хорошо документированными.
Тестирование
Проект поддерживает:
- Юнит-тесты с использованием JUnit;
- UI-тесты с использованием API тестирования Compose;
- Интеграционные тесты.
Модуль Core UI
Модуль Core UI предоставляет общие UI-компоненты, определения темы и реализацию системы дизайна для приложения Locket. Этот модуль служит основой для поддержания согласованного UI/UX во всех функциях.
Общие компоненты
- Общие кнопки;
- Текстовые поля;
- Индикаторы загрузки;
- Состояния ошибок;
- Компоненты диалогов;
- Компоненты навигации.
Система дизайна
- Константы отступов;
- Значения высоты;
- Спецификации анимации;
- Система иконок;
- Пользовательские composables.
Цвета
- Используйте заранее определенные цветовые токены из темы;
- Следуйте рекомендациям по доступности для контрастных соотношений;
- Поддерживайте как светлую, так и темную темы
Типография
- Используйте типографические стили, определенные в теме;
- Поддерживайте согласованную иерархию текста;
- Следуйте руководствам по читаемости
Отступы
- Используйте заранее определенные значения отступов;
- Поддерживайте согласованную обводку компонентов;
- Следуйте системе макета сетки.
Тестирование
- Модульные тесты компонентов;
- Тесты темы;
- Тесты доступности;
- Тесты темного режима.
Кастомизация
Компоненты могут быть настроены через:
- Оверлеи темы;
- Параметры компонентов;
- Изменения стиля;
- Пользовательские композиции.
Модуль Domain
Модуль Domain содержит основную бизнес-логику и сценарии использования для приложения Locket. Этот модуль независим от компонентов Android и следует принципам чистой архитектуры.
Сценарии использования
Содержит все операции бизнес-логики:
- Сценарии использования обработки изображений;
- Сценарии взаимодействия с пользователем;
- Сценарии манипуляции данными;
- Координация фоновых задач.
Модели
Классы модели, специфичные для домена, представляющие основные бизнес-объекты:
- Сущности данных;
- Объекты значений;
- Перечисления;
- Пользовательские типы.
Репозитории
Определения интерфейсов для доступа к данным:
- Репозиторий изображений;
- Репозиторий пользователя;
- Репозиторий настроек;
- Репозиторий кеша.
Общие утилиты и константы
- Типы результатов;
- Обработка ошибок;
- Правила валидации;
- Бизнес-константы.
Тестирование
- Каждый сценарий использования должен иметь соответствующие модульные тесты;
- Используйте интерфейсы для mock-зависимостей;
- Тестируйте как успешные, так и неуспешные сценарии;
- Проверяйте соблюдение бизнес-правил.
Обработка ошибок
Модуль определяет различные типы ошибок:
- Ошибки бизнес-логики;
- Ошибки валидации;
- Ошибки доступа к ресурсам;
- Ошибки обработки.
Модуль Предпросмотра Камеры
Модуль Предпросмотра Камеры предоставляет функциональность камеры для приложения Locket, управляющую инициализацией камеры, предпросмотром и захватом изображений.
Функции
- Функциональность предпросмотра камеры;
- Возможности захвата изображений;
- Обработка разрешений для камеры;
- Конфигурация и настройки камеры;
Архитектура
Этот модуль следует паттерну “Чистой Архитектуры” и имеет следующую структуру: Слой Представления:
- Компоненты Compose для предпросмотра камеры;
- Управление состоянием представления камеры;
- Обработка взаимодействия с пользователем. Слой Домен:
- Сценарии использования камеры;
- Обработка захвата изображений;
- Логика обработки разрешений.
Тестирование
- Модульные тесты для логики камеры;
- UI тесты для компонентов предпросмотра камеры;
- Интеграционные тесты для функциональности камеры.
Обработка ошибок
Модуль предоставляет комплексную обработку ошибок для:
- Сбоев инициализации камеры;
- Сценариев отказа в разрешении;
- Ошибок захвата изображений;
- Проблем совместимости устройств.