# Новая архитектура приложения

## Проблемы текущей архитектуры:

1. **AppController смешивает логику и UI**:
   - `mapInterface.updateOwnVesselPosition()` вызывается напрямую
   - `uiHandler.post(() -> mapInterface.addAISVesselMarker())`
   - Контроллеры знают о UI деталях

2. **Нет единого поток UI операций**:
   - Каждый контроллер делает свои UI вызовы
   - Нет централизованного throttling для карты
   - Перегрузка UI потока

## Новая архитектура:

### 1. **Контроллеры (Background Threads)**:
- Только **обновляют модель данных** (ownVessel, aisVessels)
- Только **вычисления** (paths, predictions, compass)
- Только **парсинг данных** (NMEA, GPS, UDP)
- **Не знают** о UI карте

### 2. **UI Coordinator (Main Thread)**:
- **Единая точка** всех UI операций
- **Централизованный throttling** (500мс, 1сек)
- **Батчинг** операций карты
- **Координация** между контроллерами и UI

### 3. **Data Flow**:

```
Background Threads → Model Updates → UI Coordinator → Throttled Map Updates
     ↓                    ↓               ↓                    ↓
  NMEA/GPS           ownVessel        Batched UI           MapLibre
  Parsing            AIS Data         Operations           Rendering
```

## План реализации:

### Этап 1: Создать UI Coordinator
```java
public class UIRenderingCoordinator {
    private MapInterface mapInterface;
    private Handler uiHandler;
    private Runnable batchedUpdateRunnable;
    private Set<String> pendingVesselUpdates;
    private Map<String, AISVessel> pendingAISUpdates;
    
    void requestVesselUpdate(Vessel vessel) { /* add to pending */ }
    void requestAISUpdate(AISVessel vessel) { /* add to pending */ }
    void executeBatchUpdate() { /* throttled map rendering */ }
}
```

### Этап 2: Рефакторить AppController
- Убрать все `mapInterface.*` вызовы
- Только обновлять `ownVessel` данные
- Уведомлять `UIRenderingCoordinator` через интерфейс
- Никаких `uiHandler.post()` в контроллерах

### Этап 3: Установить throttling
- Все UI операции → UI Coordinator
- Throttling 500мс для критичных операций
- Throttling 1сек для некритичных (paths, compass)

### Этап 4: Батчинг операций
- Собирать все изменения за период throttling
- Одним вызовом обновить всю карту
- Минимизировать количество `mapInterface` вызовов

## Ожидаемый результат:

✅ **Стабильная производительность** - контроллеры работают в фоне  
✅ **Предсказуемые зависания** - все UI операции через единую точку  
✅ **Масштабируемость** - легко добавить новые контроллеры  
✅ **Тестируемость** - контроллеры не зависят от UI  
✅ **Производительность** - минимум UI операций, максимум батчинга
