CloudCastle Clock

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

ClockAwareTrait — Uhr-Injektion per Setter

Zweck

Ein Trait für Services: setClock() + geschütztes now(); ohne Setzen greift die globale Uhr. Parität mit symfony ClockAwareTrait, jedoch ohne erforderlichen Container.

Wofür und wie einzusetzen

Leichtgewichtige verwaltete Zeit für bestehende Klassen: den Trait einbinden, in Tests setClock(new MockClock(...)) aufrufen.

Beispiel

final class ReportService
{
    use ClockAwareTrait;

    public function build(): Report
    {
        return new Report(generatedAt: $this->now());
    }
}

// In a test:
$service->setClock(FrozenClock::from('2026-01-01', 'UTC'));

Anti-Muster

Für neue Services ist die Konstruktor-Injektion der ClockInterface klarer als ein Setter.

Lebenszyklus

flowchart LR
    A[Service + ClockAwareTrait] -->|now()| B{clock set?}
    B -->|yes| C[Injected clock]
    B -->|no| D[ClockHolder global]

Funktionsvergleich mit Alternativen

Aspekt🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Uhr-Injektion per Setter✅✅❌❌❌❌
Rückgriff auf die globale Uhr✅✅❌❌❌❌
Kein erforderlicher Container✅❌❌❌❌❌
Geschütztes now() für Unterklassen✅✅❌❌❌❌
Gesamt🏆 430000

← Zurück zur Funktionsliste


🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano