mirror of
https://github.com/BBQQYT/ChaosAlicePro.git
synced 2026-03-20 16:43:53 +03:00
Page:
Project Architecture
No results
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Архитектура проекта
Этот документ описывает техническое устройство приложения и основные технологии, используемые в проекте.
💻 Технологический стек
- Язык: Kotlin (100%)
- UI: Jetpack Compose — для построения всего пользовательского интерфейса.
- Архитектура: MVVM (Model-View-ViewModel)
- Асинхронность: Kotlin Coroutines & Flow
- Внедрение зависимостей: Hilt
- Навигация: Navigation Compose
- Работа с сетью: Retrofit & OkHttp
- Хранение данных:
- Room — для хранения истории чатов и сообщений.
- Jetpack DataStore — для хранения настроек и API-ключей.
- Сериализация: Kotlinx.serialization
- Загрузка изображений: Coil
🏗️ Структура слоев
Проект следует классической многослойной архитектуре.
1. UI Layer (/ui)
- Построен полностью на Jetpack Compose.
- Каждый экран или группа экранов (
chat,chatlist,settings) имеет свойViewModel. ViewModelуправляет состоянием экрана черезStateFlow<UiState>.- Экраны (
Composable-функции) подписываются наUiStateи перерисовываются при его изменении.
2. Data Layer (/data)
- Реализован по паттерну Repository.
ChatRepository: Центральный узел для всех операций с чатами. Координирует работу с локальной базой данных (ChatDao) и сетевыми провайдерами (LlmProvider).PersonaRepository: Отвечает за загрузку официальных и пользовательских персонажей.SettingsRepositoryиTokenManager: Управляют чтением и записью всех настроек приложения из DataStore.
3. Источники данных (/data/local и /data/network)
-
Локальные:
AppDatabase(Room): Содержит таблицыchats(ChatEntity) иmessages(MessageEntity).DataStore: Используется черезSettingsRepositoryдля хранения пар "ключ-значение".
-
Сетевые:
LlmProvider: Гибкий интерфейс для взаимодействия с LLM. Имеет реализацииGeminiLlmProviderиOpenAiCompatibleLlmProvider.LlmProviderFactory: Фабрика, которая предоставляет нужную реализациюLlmProviderв зависимости от настроек. Это позволяет легко добавлять новых провайдеров.- Retrofit-интерфейсы:
PersonaApiServiceиGenericLlmApiServiceдля выполнения HTTP-запросов.
🎨 Система тем (/ui/theme/theming)
Одной из ключевых особенностей является гибкая система тем.
ThemeManager: Центральный объект, который на основе выбранной в настройкахAppThemeпредоставляет конфигурациюThemeConfig.ThemeConfig: Data-класс, который содержит ссылки на нужные@Composable-функции для каждого экрана (chatListScreen,chatScreen).AppNavGraph: При построении графа навигации он получаетThemeConfigи вызывает функции из него, тем самым полностью подменяя реализацию экранов.
Это позволяет каждой теме иметь не только свою цветовую схему, но и уникальную структуру и логику UI.