В этом разделе описан стек технологий, использованных в Middara Helper, и обоснование выбора каждой из них.
Обзор стека
| Технология | Версия | Назначение |
|---|---|---|
Kotlin |
2.0+ |
Основной язык разработки |
Jetpack Compose |
BOM 2025.x |
Декларативный UI-фреймворк |
Room |
2.x |
Локальная база данных (SQLite ORM) |
Coil |
3.x |
Загрузка и кэширование изображений |
Gson |
2.x |
Парсинг JSON (база карт) |
Kotlin Coroutines |
1.x |
Асинхронное программирование |
Navigation Compose |
2.x |
Навигация между экранами |
Hilt |
2.x |
Dependency Injection |
KSP |
— |
Процессор аннотаций (Room, Hilt) |
Kotlin
Приложение написано полностью на Kotlin — официальном языке разработки Android-приложений, рекомендованном Google начиная с 2019 года.
Причины выбора:
-
Null Safety — система типов исключает
NullPointerExceptionна уровне компилятора -
Корутины — нативная поддержка асинхронного кода без колбеков и сложных цепочек
-
Расширения и лямбды — лаконичный и читаемый код
-
Полная совместимость с Java — можно использовать любые Java-библиотеки
-
Поддержка Google — Kotlin — первоклассный язык для Android, все новые API разрабатываются с его учетом
Jetpack Compose
UI написан на Jetpack Compose — современном декларативном фреймворке для построения интерфейсов Android.
Причины выбора:
-
Декларативность — UI описывается как функция от состояния (
UiState → UI), а не через мутабельные View -
Меньше кода — нет XML-макетов, нет
findViewById, нетViewHolder -
Хорошая интеграция с ViewModel и StateFlow —
collectAsState()моментально подписывает Composable на поток данных -
Официальный инструмент Google — активно развивается, имеет большое комьюнити
Room
Для хранения состояния колоды героя используется Room — официальная ORM-библиотека Android поверх SQLite.
Причины выбора:
-
Типобезопасность — SQL-запросы проверяются на этапе компиляции через аннотации
-
Интеграция с Coroutines — DAO-методы могут возвращать
Flow<T>из коробки -
Официальная поддержка — часть Android Jetpack, долгосрочная поддержка гарантирована
-
Минимальный бойлерплейт — достаточно описать
@Entity,@Daoи@Database
Карты из cards.json в Room не хранятся — только состояние колоды героя (какие карты выбраны). Это упрощает обновление базы карт без миграций схемы БД.
|
Coil
Изображения карт отображаются через Coil (Coroutine Image Loader) — современную библиотеку загрузки изображений для Android, написанную на Kotlin.
Причины выбора:
-
Kotlin-first — написана на Kotlin с нативной поддержкой корутин
-
Compose-расширение —
AsyncImageизcoil-composeидеально вписывается в Compose -
Кэширование — автоматически кэширует изображения в памяти и на диске
-
Легкость — меньше кода и зависимостей, чем у аналогов (Glide, Picasso)
Gson
Для парсинга cards.json используется Gson — библиотека сериализации/десериализации JSON от Google.
Почему Gson, а не Moshi или kotlinx.serialization:
-
Простота подключения и использования для однократного чтения статичного файла
-
Отсутствие необходимости в аннотациях для простых data class