CloudCastle Clock

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

ClockAwareTrait — injection de l’horloge par setter

Objectif

Un trait pour les services : setClock() + un now() protégé ; à défaut de configuration, l’horloge globale est utilisée. À parité avec le ClockAwareTrait de symfony, mais sans conteneur obligatoire.

À quoi ça sert et comment l’utiliser

Adoption légère d’un temps maîtrisé dans des classes existantes : intégrez le trait, puis dans les tests appelez setClock(new MockClock(...)).

Exemple

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-modèles

Pour les nouveaux services, l’injection de ClockInterface par le constructeur est plus transparente qu’un setter.

Cycle de vie

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

Comparaison de la fonctionnalité avec les concurrents

Aspect🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Injection de l’horloge par setter✅✅❌❌❌❌
Repli sur l’horloge globale✅✅❌❌❌❌
Sans conteneur obligatoire✅❌❌❌❌❌
now() protégé pour les sous-classes✅✅❌❌❌❌
Total🏆 430000

← Retour à la liste des fonctionnalités


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