CloudCastle Clock

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

Deadline — échéances

Objectif

Un couple « horloge + instant d’expiration » : isExpired(), remaining(): TimeSpan, prolongation via extendedBy(). Immuable.

À quoi ça sert et comment l’utiliser

Délais d’expiration d’opérations, durées de vie des jetons, SLA : Deadline::after($clock, TimeSpan::ofSeconds(30)) ; déterministe dans les tests via MockClock.

Exemple

$deadline = Deadline::after($clock, TimeSpan::ofSeconds(30));
while (!$deadline->isExpired()) {
    $left = $deadline->remaining();   // TimeSpan
    // ... time-bounded work ...
}
$prolonged = $deadline->extendedBy(10.0);

Anti-modèles

Ne comparez pas les instants d’expiration manuellement — isExpired() encapsule la limite (l’instant d’expiration lui-même est déjà « expiré »).

Cycle de vie

stateDiagram-v2
    [*] --> Active: after(clock, span) / until(clock, moment)
    Active --> Active: remaining() > 0
    Active --> Expired: clock reaches expiresAt
    Expired --> Active: extendedBy(span)
    Expired --> [*]

Comparaison des fonctionnalités avec les concurrents

Aspect🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Échéance liée à une horloge✅❌❌❌❌❌
Temps restant sous forme de TimeSpan✅❌❌❌❌❌
Prolongation immuable✅❌❌❌❌❌
Déterminisme dans les tests✅❌❌❌❌❌
Total🏆 400000

← Retour à la liste des fonctionnalités


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