corp-app/TECHDOC/ARCHITECTURE.md

225 lines
9.4 KiB
Markdown
Raw Permalink Blame History

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.

# Архитектура приложения
## 📋 Структура проекта
```
CORP-MAUI/
├── Models/ # Модели данных
│ ├── User.cs # Модель пользователя
│ ├── Message.cs # Модель сообщения
│ └── AuthResponse.cs # Ответ аутентификации
├── Services/ # Сервисы
│ ├── ApiService.cs # HTTP-клиент для REST API
│ └── WebSocketService.cs # WebSocket-клиент
├── Pages/ # Страницы приложения
│ ├── LoginPage.xaml # Страница входа
│ ├── ProfilePage.xaml # Профиль пользователя
│ ├── EmployeesPage.xaml # Список сотрудников
│ └── ChatPage.xaml # Чат с сотрудником
├── Platforms/ # Платформенно-специфичный код
│ ├── Android/
│ ├── iOS/
│ ├── MacCatalyst/
│ ├── Windows/
│ └── Tizen/
├── Resources/ # Ресурсы приложения
│ ├── AppIcon/
│ ├── Fonts/
│ ├── Images/
│ ├── Splash/
│ └── Styles/
├── ServiceProvider.cs # Глобальный провайдер сервисов
├── App.xaml.cs # Точка входа приложения
└── AppShell.xaml # Навигационная структура
```
## 🏛️ Ключевые компоненты
### 1. ApiService - REST API клиент
**Назначение:** HTTP-клиент для взаимодействия с REST API сервера.
**Основные функции:**
- Аутентификация пользователей (`POST /auth/login`)
- Получение списка пользователей (`GET /users`)
- Получение сообщений (`GET /messages`)
- Отправка сообщений (`POST /messages`)
- Поиск пользователей (`GET /users/search`)
- Обновление статуса (`PUT /users/status`)
**Особенности:**
- Автоматическое управление JWT токенами (access/refresh)
- Автоматическое обновление токена при истечении (401/403)
- Безопасное хранение токенов в SecureStorage
- Повторная отправка запроса после обновления токена
- Настраиваемая конфигурация (BaseUrl, Timeout, Headers)
**Используемые технологии:**
- `HttpClient` для HTTP запросов
- `SecureStorage` для хранения токенов
- `Newtonsoft.Json` для сериализации/десериализации
### 2. WebSocketService - WebSocket клиент
**Назначение:** Real-time коммуникация через WebSocket.
**Основные функции:**
- Подключение к WebSocket серверу
- Отправка и получение сообщений в реальном времени
- Индикаторы набора текста ("печатает...")
- Обновление статусов пользователей (онлайн/оффлайн)
- Автоматическое переподключение при разрыве соединения
**Особенности:**
- Автоматический подбор рабочего WebSocket URL
- Поддержка WSS (WebSocket Secure)
- Передача Bearer токена при подключении
- Event-based архитектура для обработки сообщений
**События:**
- `MessageReceived` - получено новое сообщение
- `UserStatusChanged` - изменился статус пользователя
- `TypingIndicatorReceived` - пользователь печатает
**Используемые технологии:**
- `System.Net.WebSockets.ClientWebSocket`
- `Newtonsoft.Json` для работы с JSON
### 3. ServiceProvider - Singleton провайдер
**Назначение:** Централизованный доступ к сервисам приложения.
**Преимущества:**
- Единая точка доступа к ApiService и WebSocketService
- Гарантия единственного экземпляра сервисов
- Упрощение dependency injection
**Использование:**
```csharp
var apiService = ServiceProvider.ApiService;
var wsService = ServiceProvider.WebSocketService;
```
## 🎯 Паттерны проектирования
### Singleton
Используется для ServiceProvider, ApiService и WebSocketService для обеспечения единственного экземпляра в приложении.
### Repository Pattern
ApiService действует как репозиторий для работы с данными сервера.
### Observer Pattern
WebSocketService использует события (Events) для уведомления UI о новых сообщениях и изменениях статусов.
### MVVM (Model-View-ViewModel)
Архитектура страниц следует паттерну MVVM:
- **Model**: классы в папке Models
- **View**: XAML файлы в папке Pages
- **ViewModel**: code-behind файлы (.xaml.cs)
## 🔧 Используемые технологии
### Фреймворки
- **.NET 9.0** - платформа разработки
- **.NET MAUI** - кроссплатформенный UI фреймворк
### Библиотеки
- **Newtonsoft.Json** - JSON сериализация/десериализация
- **System.Net.WebSockets** - WebSocket клиент
- **Microsoft.Maui.Essentials.SecureStorage** - безопасное хранение данных
### Языки и стандарты
- **C# 12** - язык программирования
- **XAML** - разметка пользовательского интерфейса
- **JSON** - формат обмена данными
- **JWT** - токены аутентификации
- **WebSocket Protocol** - real-time коммуникация
## 🔐 Безопасность
### Хранение токенов
- JWT токены (access/refresh) хранятся в `SecureStorage`
- `SecureStorage` использует платформенные механизмы шифрования:
- **Android**: KeyStore
- **iOS**: Keychain
- **Windows**: Data Protection API
### Коммуникация
- **HTTPS** для REST API (TLS/SSL)
- **WSS** для WebSocket (WebSocket Secure)
- **Bearer Authentication** для всех защищенных endpoints
### Автоматический выход
- При истечении refresh токена пользователь перенаправляется на страницу входа
- Токены очищаются при выходе из системы
## 🎨 UI/UX архитектура
### Навигация
- **AppShell** - основная навигационная структура
- **FlyoutMenu** - боковое меню
- **TabBar** - нижняя панель вкладок
### Страницы
1. **LoginPage** - аутентификация
2. **EmployeesPage** - список сотрудников с поиском
3. **ChatPage** - личные сообщения
4. **ProfilePage** - профиль пользователя
### UI особенности
- Material Design стиль
- Адаптивный дизайн для разных экранов
- Плавные анимации и переходы
- Индикаторы загрузки
- Pull-to-refresh для обновления данных
- User-friendly сообщения об ошибках
## 📱 Платформенная специфика
### Android
- Минимальная версия: API 21 (Android 5.0)
- Target версия: API 34 (Android 14)
- Разрешения: INTERNET, ACCESS_NETWORK_STATE
### iOS
- Минимальная версия: iOS 11.0
- Требуется Xcode и Mac для сборки
- Разрешения для фоновой работы
### Windows
- Минимальная версия: Windows 10.0.19041.0
- UWP приложение
### MacCatalyst
- Минимальная версия: macOS 10.15
## 🔄 Жизненный цикл приложения
1. **Запуск** (`App.xaml.cs`)
- Инициализация сервисов
- Проверка сохраненных токенов
- Определение стартовой страницы (Login/Main)
2. **Аутентификация** (`LoginPage`)
- Ввод учетных данных
- Получение JWT токенов
- Сохранение в SecureStorage
- Подключение к WebSocket
- Переход к главному экрану
3. **Работа с данными**
- REST API для запросов данных
- WebSocket для real-time обновлений
- Автоматическое обновление токенов
4. **Выход**
- Обновление статуса на "офлайн"
- Отключение WebSocket
- Очистка токенов
- Возврат к LoginPage
---
**Последнее обновление:** 2026-01-12