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

4.1 KiB
Raw Blame History

🔧 Архитектурные исправления - ЗАВЕРШЕНО!

Исправленные проблемы:

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! 🎉