Разработчикам - 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.

Инструкции по настройке

  1. Клонируйте репозиторий;
  2. Откройте проект в Android Studio;
  3. Синхронизируйте проект с файлами Gradle;
  4. Запустите приложение на эмуляторе или физическом устройстве (Android 10 или выше).

Варианты сборки

Debug: Сборка для разработки с включенной отладкой;

Release: Продуктовая сборка с оптимизацией.

Архитектура

Приложение следует принципам Чистой Архитектуры с следующими слоями:

  1. Слой Представления (UI):
  • Компоненты UI Compose;
  • ViewModels;
  • Управление состоянием UI.
  1. Слой Домен:
  • Сценарии использования;
  • Бизнес-логика;
  • Модели домена.
  • Слой Данных:
  • Репозитории;
  • Источники данных;
  • Модели данных.

Функции

  • Функциональность камеры;
  • Редактирование изображений/контента;
  • Лента контента;
  • Функционал подписки;
  • Включение вспышки;
  • Аутентификация;
  • Добавление описания к изображениям.

Руководства по разработке

Стиль кода

  • Следуйте соглашениям по кодированию 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 тесты для компонентов предпросмотра камеры;
  • Интеграционные тесты для функциональности камеры.

Обработка ошибок

Модуль предоставляет комплексную обработку ошибок для:

  • Сбоев инициализации камеры;
  • Сценариев отказа в разрешении;
  • Ошибок захвата изображений;
  • Проблем совместимости устройств.