CloudCastle Clock

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

Deadline — дедлайны

Назначение

Пара «часы + момент истечения»: isExpired(), remaining(): TimeSpan, продление extendedBy(). Иммутабелен.

Для чего и как применять

Тайм-ауты операций, сроки действия токенов, SLA: Deadline::after($clock, TimeSpan::ofSeconds(30)); в тестах детерминирован через MockClock.

Пример

$deadline = Deadline::after($clock, TimeSpan::ofSeconds(30));
while (!$deadline->isExpired()) {
    $left = $deadline->remaining();   // TimeSpan
    // ... работа с контролем времени ...
}
$prolonged = $deadline->extendedBy(10.0);

Анти-паттерны

Не сравнивайте моменты istечения вручную — isExpired() инкапсулирует границу (момент истечения уже «истёк»).

Жизненный цикл

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

Сравнение возможности с аналогами

Аспект🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Дедлайн, привязанный к часам✅❌❌❌❌❌
Остаток как TimeSpan✅❌❌❌❌❌
Иммутабельное продление✅❌❌❌❌❌
Детерминизм в тестах✅❌❌❌❌❌
Всего🏆 400000

← К списку возможностей


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