CloudCastle Clock

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

ClockAwareTrait — iniezione dell'orologio tramite setter

Scopo

Trait per i servizi: setClock() + now() protetto; senza impostazione — l'orologio globale. Alla pari con il ClockAwareTrait di symfony, ma senza container obbligatorio.

A cosa serve e come usarlo

Introduzione leggera del tempo controllato in classi esistenti: si aggiunge il trait, nei test setClock(new MockClock(...)).

Esempio

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

Per i nuovi servizi l'iniezione tramite costruttore di ClockInterface è più trasparente di un setter.

Ciclo di vita

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

Confronto della funzionalità con gli analoghi

Aspetto🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Iniezione dell'orologio tramite setter✅✅❌❌❌❌
Fallback all'orologio globale✅✅❌❌❌❌
Senza container obbligatorio✅❌❌❌❌❌
now() protetto per le sottoclassi✅✅❌❌❌❌
Totale🏆 430000

← Torna all'elenco delle funzionalità


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