Files
michaelschiemer/docs/architecture/STRUKTUR-DOKUMENTATION.md

3.9 KiB

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:

#[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:

$eventDispatcher->addHandler(EventClass::class, function($event) {
    // Event verarbeiten
});

HTTP-Pipeline

HTTP-Requests durchlaufen eine Middleware-Pipeline:

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:

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

// 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