Files
AndroidAisMap/ARCHITECTURE_IMPROVEMENTS.md
T
2025-10-07 09:34:26 +03:00

92 lines
4.1 KiB
Markdown
Raw 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.
# 🔧 Архитектурные исправления - ЗАВЕРШЕНО!
## ✅ Исправленные проблемы:
### 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!** 🎉