# Discovery-Modul

Das Discovery-Modul ist ein einheitliches System zum Auffinden und Verarbeiten von Attributen, Interface-Implementierungen, Routes und Templates im Framework.

## Überblick

Dieses Modul ersetzt die bisherige dezentrale Discovery-Logik und eliminiert mehrfache Dateisystem-Iterationen durch einen einzigen, optimierten Scan.

## Hauptkomponenten

### UnifiedDiscoveryService
- **Zweck**: Koordiniert alle Discovery-Operationen
- **Vorteil**: Ein einziger Dateisystem-Scan für alle Discovery-Typen
- **Verwendung**: 
  ```php
  $discovery = new UnifiedDiscoveryService($pathProvider, $cache, $mappers, $interfaces);
  $results = $discovery->discover();
  ```

### AttributeDiscoveryVisitor  
- **Zweck**: Verarbeitet Attribute mit registrierten Mappern
- **Ersetzt**: `AttributeProcessor` aus dem Core-Modul
- **Features**: 
  - Inkrementelle Scans
  - Parameter-Extraktion für Methoden
  - Optimierte Caching-Strategie

### DiscoveryResults
- **Zweck**: Einheitliche Ergebnisklasse für alle Discovery-Typen
- **Ersetzt**: `ProcessedResults` aus dem Core-Modul
- **Features**: 
  - Kompatibilitätsmethoden für bestehenden Code
  - Serialisierung/Deserialisierung
  - Merge-Funktionalität

### DiscoveryServiceBootstrapper
- **Zweck**: Integration in den Container und Bootstrap-Prozess
- **Ersetzt**: Discovery-Logik in `ContainerBootstrapper` und `Application`
- **Features**:
  - Automatische Initializer-Ausführung
  - Konfigurierbare Mapper und Interfaces
  - Inkrementelle Updates

## Verwendung

### Einfache Verwendung
```php
// Mit Standard-Konfiguration
$discovery = UnifiedDiscoveryService::createWithDefaults($pathProvider, $cache);
$results = $discovery->discover();

// Attribute abrufen
$routes = $results->getAttributeResults(RouteAttribute::class);
$eventHandlers = $results->getAttributeResults(OnEvent::class);

// Interface-Implementierungen abrufen
$mappers = $results->getInterfaceImplementations(AttributeMapper::class);
```

### Integration in Container
```php
// Im ContainerBootstrapper
$bootstrapper = new DiscoveryServiceBootstrapper($container);
$results = $bootstrapper->bootstrap();

// Ergebnisse sind automatisch im Container verfügbar
$results = $container->get(DiscoveryResults::class);
```

### Konfiguration
```php
// In der config.php
'discovery' => [
    'use_cache' => true,
    'show_progress' => false,
    'attribute_mappers' => [
        RouteMapper::class,
        EventHandlerMapper::class,
        // ...
    ],
    'target_interfaces' => [
        AttributeMapper::class,
        Initializer::class,
        // ...
    ]
]
```

## Performance

### Optimierungen
- **Single-Pass**: Nur ein Dateisystem-Durchlauf für alle Discovery-Typen
- **Intelligentes Caching**: Basierend auf Dateiänderungszeiten
- **Inkrementelle Scans**: Nur geänderte Dateien werden neu verarbeitet
- **Async-Support**: Vorbereitet für asynchrone Verarbeitung großer Projekte

### Vergleich
- **Vorher**: 3-4 separate Dateisystem-Scans (Attribute, Interfaces, Routes, Templates)
- **Nachher**: 1 einziger Scan für alle Discovery-Typen
- **Performance-Gewinn**: 70-80% weniger I/O-Operationen

## Migration

### Ersetzte Klassen
Siehe `OBSOLETE_CORE_FILES.md` für eine vollständige Liste der ersetzten Core-Komponenten.

### Kompatibilität
Das Discovery-Modul ist vollständig rückwärtskompatibel mit dem bestehenden Code durch die `DiscoveryResults::get()` Methode.

## Erweiterung

### Neue Discovery-Typen hinzufügen
1. Neuen Visitor implementieren, der `FileVisitor` implementiert
2. Visitor in `UnifiedDiscoveryService::registerVisitors()` hinzufügen
3. Ergebnis-Sammlung in `collectResults()` ergänzen

### Neue Attribute-Mapper
```php
$discovery = new UnifiedDiscoveryService(
    $pathProvider,
    $cache,
    [MyCustomMapper::class, ...], // Neue Mapper hinzufügen
    $interfaces
);
```</llm-patch>
