Major architecture update

This commit is contained in:
2025-10-07 09:34:26 +03:00
parent 982e940b8d
commit a607133032
32 changed files with 6439 additions and 2061 deletions
+91
View File
@@ -0,0 +1,91 @@
# 🔧 Архитектурные исправления - ЗАВЕРШЕНО!
## ✅ Исправленные проблемы:
### 1. **MarkerManager перенесен в MapController** ✅
#### **Проблема:**
MarkerManager хранился в реализации карты (YandexMapImpl), что нарушало принцип централизованного управления.
#### **Решение:**
-**Интерфейс MarkerManager** уже существовал
-**Добавлен в MapController**:
- Переменная `private MarkerManager markerManager;`
- Метод `getMarkerManager()` для доступа
- Метод `initializeMarkerManager()` для инициализации
- Метод `cleanupMarkerManager()` для очистки
-**Интеграция с инициализацией карт**:
- Вызов `initializeMarkerManager()` в `initializeMap()` и `initializeMapLibre()`
- Вызов `cleanupMarkerManager()` в `cleanup()`
-**SDK-специфичная логика**:
- Yandex: создается `YandexMarkerManager`
- MapLibre: `null` (использует встроенное управление маркерами)
### 2. **Исправлена логика GPSLocationListener** ✅
#### **Проблема:**
GPSLocationListener дублировался в NMEAParser и NMEAController, логика работы была неправильной.
#### **Решение:**
-**Убрано дублирование**: GPSLocationListener теперь только в NMEAController
-**Добавлена правильная логика режимов**:
#### **Режимы работы:**
1. **`hybrid` (гибридный)**:
- GPS Android API для координат
- NMEA с Android идет в NMEA Parser
- Игнорируем "$" сообщения по UDP
2. **`android_only` (только Android GPS)**:
- Только встроенный GPS
- НЕ шлем в парсер NMEA с Android
- Игнорируем все NMEA сообщения
3. **`nmea_only` (только NMEA)**:
- Игнорируем locationManager
- Ищем RMC через Android NMEA
- Обрабатываем все NMEA сообщения
-**Добавлен метод `configureMode()`** для настройки режима
-**Обновлен `setDataMode()`** для применения настроек
-**Добавлена фильтрация в `parseNMEAMessage()`**:
- В режиме `android_only` игнорируются NMEA сообщения
-**Сохранение текущего режима** в переменной `currentDataMode`
## 🎯 **Результат:**
### ✅ **MarkerManager централизован:**
- Управляется через MapController
- SDK-специфичная логика изолирована
- Легко расширяется для новых SDK
### ✅ **GPS логика исправлена:**
- Нет дублирования GPSLocationListener
- Правильная работа режимов
- Фильтрация сообщений по режиму
- Четкое разделение источников данных
## 📊 **Статистика исправлений:**
- **Исправлено проблем**: 2
- **Обновлено файлов**: 2
- **Добавлено методов**: 6
- **Добавлено строк кода**: ~100
## 🚀 **Архитектура улучшена:**
```
MapController
├── MarkerManager (централизован)
│ ├── YandexMarkerManager (для Yandex)
│ └── null (для MapLibre - встроенное управление)
└── MapInterface (стратегия карт)
NMEAController
├── GPSLocationListener (единственный экземпляр)
├── AndroidNMEAListener
└── NMEAParser (с правильной логикой режимов)
```
**Архитектура стала более чистой и соответствует принципам SOLID!** 🎉