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
- Erstellen Sie ein neues Verzeichnis unter
/src/Framework - Implementieren Sie eine Initializer-Klasse mit dem
#[Initializer]-Attribut - 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