generated from Grigo/AndroidTemplate
Major architecture update
This commit is contained in:
@@ -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!** 🎉
|
||||
Reference in New Issue
Block a user