Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤8👍6🤝3
🔥9👍6😁3❤1
Когда события завязаны на время, удобнее описывать поведение как последовательность шагов с паузами, чем вручную крутить таймеры и внутренние флаги.
Коротко о корутинах:
• Помогают вынести ожидания и задержки из игрового цикла;
• Делают последовательные события читаемыми, как сценарий или раскадровка;
• Упрощают отладку странных зависаний, редких триггеров и переходов.
Приручи сценарии времени, и игра откликнется стабильностью, плавностью, ясной логикой и быстрыми изменениями в будущем.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤11👍6🤝4😁1
Тестируем время с TimeProvider в .NET 8 без DateTime.UtcNow!
Когда код зависит от текущего времени (срок жизни токена, таймаут, ретраи) и везде стоит
В .NET 8 можно передавать время через
Сервис, который решает «просрочен токен или нет», принимает
В тестах просто подменяем время на фейковое:
🔥 Главное — не дергайте
в приложении —
➡️ C# Ready | #практика
Когда код зависит от текущего времени (срок жизни токена, таймаут, ретраи) и везде стоит
DateTime.UtcNow, такие вещи сложно тестировать.В .NET 8 можно передавать время через
TimeProvider — и сразу становится проще.Сервис, который решает «просрочен токен или нет», принимает
TimeProvider:using System;
public class TokenService
{
private readonly TimeProvider _timeProvider;
public TokenService(TimeProvider timeProvider)
{
_timeProvider = timeProvider;
}
public bool IsExpired(DateTimeOffset expiresAtUtc)
{
var now = _timeProvider.GetUtcNow();
return now >= expiresAtUtc;
}
}
В тестах просто подменяем время на фейковое:
using System;
using Microsoft.Extensions.Time.Testing;
// "Замороженное" время
var fakeTime = new FakeTimeProvider(DateTimeOffset.UtcNow);
var service = new TokenService(fakeTime);
var expiresAt = fakeTime.GetUtcNow().AddMinutes(1);
Console.WriteLine(service.IsExpired(expiresAt)); // false
// Прокручиваем время вперёд
fakeTime.Advance(TimeSpan.FromMinutes(2));
Console.WriteLine(service.IsExpired(expiresAt)); // true
DateTime.UtcNow напрямую. Пробрасывайте в код TimeProvider:в приложении —
TimeProvider.System, в тестах — FakeTimeProvider. Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤8🔥4
Берём одно число в секундах и превращаем его в живое описание:
«1 день 3 часа 25 минут 4 секунды» — сразу понятно, сколько времени прошло или осталось.
В этой задаче:
• Разложишь общее количество секунд на дни, часы, минуты и секунды простыми делениями;
• Напишешь функцию, которая подбирает правильные окончания слов по правилам русского языка;
• Соберёшь аккуратную строку, пропуская нулевые части и красиво выводя результат в консоль.
Из такого форматирования вырастают удобные логи, таймеры и отчёты, где за сухими секундами уже видно реальное время.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤9🤝8👍2👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Это современный сайт с обширной базой знаний по backend-разработке на ASP,NET Core, архитектуре приложений, шаблонам проектирования и лучшим практикам написания кода.
На Code Maze вы найдёте подробные гайды, пошаговые туториалы и примеры из реальных проектов. Материалы подойдут как для уверенных новичков, так и для опытных разработчиков.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7🔥4
Когда логика начинает зависеть от конкретных классов, проект постепенно «деревенеет»: любое изменение тянет за собой цепочку правок, и система теряет гибкость для роста.
В этом гайде:
• Поймём, как отделить намерение от реализации в поведении кода;
• Увидим, почему подмена частей становится проще и безопаснее;
• Разберём, как интерфейсы помогают тестировать модули без хаоса.
Думая в терминах контрактов — код становится гибче, чище и легче расширяется
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤11🤝10👍7😁1