9.4 KiB
9.4 KiB
Архитектура приложения
📋 Структура проекта
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.ClientWebSocketNewtonsoft.Jsonдля работы с JSON
3. ServiceProvider - Singleton провайдер
Назначение: Централизованный доступ к сервисам приложения.
Преимущества:
- Единая точка доступа к ApiService и WebSocketService
- Гарантия единственного экземпляра сервисов
- Упрощение dependency injection
Использование:
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 - нижняя панель вкладок
Страницы
- LoginPage - аутентификация
- EmployeesPage - список сотрудников с поиском
- ChatPage - личные сообщения
- 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
🔄 Жизненный цикл приложения
-
Запуск (
App.xaml.cs)- Инициализация сервисов
- Проверка сохраненных токенов
- Определение стартовой страницы (Login/Main)
-
Аутентификация (
LoginPage)- Ввод учетных данных
- Получение JWT токенов
- Сохранение в SecureStorage
- Подключение к WebSocket
- Переход к главному экрану
-
Работа с данными
- REST API для запросов данных
- WebSocket для real-time обновлений
- Автоматическое обновление токенов
-
Выход
- Обновление статуса на "офлайн"
- Отключение WebSocket
- Очистка токенов
- Возврат к LoginPage
Последнее обновление: 2026-01-12