# Projektstruktur-Dokumentation ## Übersicht Diese Dokumentation bietet einen Überblick über die Architektur und Struktur des Projekts. Die Anwendung folgt einer modularen, serviceorientierten Architektur mit klarer Trennung von Verantwortlichkeiten. ## Hauptverzeichnisse ### `/src` Das Hauptverzeichnis für den Anwendungscode, unterteilt in mehrere Unterverzeichnisse: #### `/src/Framework` Enthält das Framework mit grundlegenden Infrastrukturkomponenten: - **Analytics**: System zur Erfassung und Analyse von Anwendungsdaten - **Attributes**: Attribute/Annotations für Metadaten - **Cache**: Caching-Mechanismen - **CommandBus**: Command-Handling-Komponenten - **Config**: Konfigurationsverwaltung - **Console**: Konsolenanwendung und -befehle - **Core**: Kernkomponenten und Events - **DI**: Dependency-Injection-Container - **ErrorHandling**: Fehlerbehandlungsmechanismen - **EventBus**: Event-Handling-System - **Exception**: Framework-Exceptions - **Filesystem**: Dateisystemoperationen - **Http**: HTTP-Request/Response-Handling - **HttpClient**: HTTP-Client für externe API-Aufrufe - **Logging**: Logging-Infrastruktur - **Performance**: Performance-Monitoring - **Queue**: Nachrichtenwarteschlangen - **Redis**: Redis-Integration - **Router**: URL-Routing - **StaticSite**: Statische Site-Generation - **Validation**: Datenvalidierung - **View**: Template-Rendering #### `/src/Application` Anwendungsspezifische Komponenten, die das Framework nutzen. #### `/src/Domain` Domain-Modelle, Entities und Business-Logik. #### `/src/Infrastructure` Infrastrukturkomponenten, die externe Systeme integrieren. #### `/src/Config` Konfigurationsdateien für verschiedene Module. ## Framework-Architektur ### Dependency Injection Das System nutzt einen leistungsfähigen DI-Container zur Verwaltung von Services: ```php #[Initializer] class ServiceInitializer { public function __invoke(Container $container): Service { // Service erstellen und zurückgeben } } ``` ### Event-System Ein Event-System ermöglicht lose Kopplung zwischen Komponenten: ```php $eventDispatcher->addHandler(EventClass::class, function($event) { // Event verarbeiten }); ``` ### HTTP-Pipeline HTTP-Requests durchlaufen eine Middleware-Pipeline: ```php class CustomMiddleware implements Middleware { public function process(Request $request, callable $next): Response { // Request verarbeiten $response = $next($request); // Response verarbeiten return $response; } } ``` ## Module und ihre Interaktionen ### Analytics-Modul Das Analytics-Modul erfasst und analysiert Anwendungsdaten: - **Events tracken**: `$analytics->track('event_name', $properties)` - **HTTP-Tracking**: Automatisch durch `AnalyticsMiddleware` - **Error-Tracking**: Integration mit dem Error-Handling-System - **Dashboard**: Admin-Interface zur Datenvisualisierung ### Konfigurationssystem Konfigurationen werden zentral verwaltet und injiziert: ```php class Service { public function __construct(private Configuration $config) { $settings = $this->config->get('module_name', $defaults); } } ``` ## Erweiterbarkeit ### Neue Module hinzufügen 1. Erstellen Sie ein neues Verzeichnis unter `/src/Framework` 2. Implementieren Sie eine Initializer-Klasse mit dem `#[Initializer]`-Attribut 3. Erstellen Sie eine entsprechende Konfigurationsdatei unter `/src/Config` ### Middleware hinzufügen ```php // In Ihrer Anwendungsklasse public function bootstrap(): void { $this->addMiddleware(YourMiddleware::class); } ``` ## Best Practices - **Dependency Injection**: Verwenden Sie Constructor-Injection für Abhängigkeiten - **Interfaces**: Definieren Sie Interfaces für alle Services - **Events**: Nutzen Sie Events für lose Kopplung zwischen Modulen - **Konfiguration**: Externalisieren Sie Konfigurationen in dedizierte Dateien - **Typsicherheit**: Nutzen Sie strenge Typisierung und readonly-Properties