Я работаю с перечислениями каждый день.
И вот 4 лучших практики, которыми я пользуюсь, чтобы код в проекте оставался чистым:
🔸 Явно указывать тип хранения
🔸 Использовать атрибуты
🔸 Хелпер-метод для получения значения из атрибута
🔸 Безопасный парсинг через
А что бы ты добавил к этому списку?
👉 @KodBlog
И вот 4 лучших практики, которыми я пользуюсь, чтобы код в проекте оставался чистым:
Denoscription для отображаемых имёнDenoscriptionTryParseА что бы ты добавил к этому списку?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍5🤨1
Entity Framework 10 будет поддерживать именованные фильтры запросов
Да, это означает, что несколько фильтров теперь можно применять одновременно, начиная с EF 10+ — при условии, что они именованные.👍
👉 @KodBlog
Да, это означает, что несколько фильтров теперь можно применять одновременно, начиная с EF 10+ — при условии, что они именованные.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5🤯2
This media is not supported in your browser
VIEW IN TELEGRAM
Необходимый репозиторий с сотнями бесплатных API для практики программирования и создания проектов.
Обновляется еженедельно и разделён по темам🔫
⇢ http://github.com/public-apis-dev/public-apis
👉 @KodBlog
Обновляется еженедельно и разделён по темам
⇢ http://github.com/public-apis-dev/public-apis
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5
Правильный способ построения асинхронных API в .NET
Большинство API работают по простому шаблону:
🔸 Клиент отправляет запрос
🔸 Сервер выполняет работу
🔸 Сервер возвращает ответ
Такой подход отлично работает для быстрых операций — например, получения данных или простых обновлений.
А что насчёт длительных операций?
Речь о задачах вроде:
> обработки больших файлов
> генерации отчётов
> конвертации видео
Такие процессы могут занимать от нескольких минут до часов.
Вот как можно правильно строить асинхронные API: читать
Как сообщить клиенту, что его запрос обработан?
Есть два подхода:
🔸 PULL — клиент опрашивает API, чтобы узнать статус
🔸 PUSH — сервер сам уведомляет клиента (через WebSocket, email и т.д.)
👉 @KodBlog
Большинство API работают по простому шаблону:
Такой подход отлично работает для быстрых операций — например, получения данных или простых обновлений.
А что насчёт длительных операций?
Речь о задачах вроде:
> обработки больших файлов
> генерации отчётов
> конвертации видео
Такие процессы могут занимать от нескольких минут до часов.
Вот как можно правильно строить асинхронные API: читать
Как сообщить клиенту, что его запрос обработан?
Есть два подхода:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍2
𝟭𝟬 шагов для оптимизации запросов в EF Core
Даже сеньоры знают не все из них
Допустим, у тебя в проде тормозит EF Core-запрос.
Как бы ты исследовал и починил проблему?
Вот пошаговый подход: ( смотри иллюстрации )
А вот как начать работу с OpenTelemetry:
↳ ссылка
Как Антон оптимизировал реальный запрос EF Core Query с 30 секунд до 30 миллисекунд:
↳ ссылка
👉 @KodBlog
Даже сеньоры знают не все из них
Допустим, у тебя в проде тормозит EF Core-запрос.
Как бы ты исследовал и починил проблему?
Вот пошаговый подход: ( смотри иллюстрации )
А вот как начать работу с OpenTelemetry:
↳ ссылка
Как Антон оптимизировал реальный запрос EF Core Query с 30 секунд до 30 миллисекунд:
↳ ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍3
Я ждал эту фичу 4 года и вот наконец она появляется в EF Core 10
EF Core 10 приносит серьёзное улучшение в метод
Раньше, чтобы сделать динамическое обновление, нужно было вручную собирать сложные и склонные к ошибкам expression tree'и.
Например: ты хочешь обновить поле
Раньше это значило писать довольно громоздкую логику вручную через expression API.
✅ Теперь — всё стало намного проще:
↳ можно просто использовать обычную лямбду, внутри которой разрешены
это улучшение делает код гораздо читаемее, поддерживаемее и снижает риск багов, связанных с ручной генерацией выражений.
Ждёшь эту фичу так же, как и я?
Дай знать, что думаешь👍
👉 @KodBlog
EF Core 10 приносит серьёзное улучшение в метод
ExecuteUpdateAsyncРаньше, чтобы сделать динамическое обновление, нужно было вручную собирать сложные и склонные к ошибкам expression tree'и.
Например: ты хочешь обновить поле
Views у блога и, при определённом условии, ещё и Name.Раньше это значило писать довольно громоздкую логику вручную через expression API.
↳ можно просто использовать обычную лямбду, внутри которой разрешены
if и другие управляющие конструкции.это улучшение делает код гораздо читаемее, поддерживаемее и снижает риск багов, связанных с ручной генерацией выражений.
Ждёшь эту фичу так же, как и я?
Дай знать, что думаешь
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25❤2
Если ты используешь GUID'ы в C# коде, тебе наверняка понравится нововведение в .NET 9: GUID версии 7.
GUID — глобально уникальный идентификатор) гарантирует уникальность значений между разными источниками.
В предыдущих версиях C# новые записи вставлялись в случайные позиции, что приводило к фрагментации индексов.
В .NET 9 появилась поддержка GUID версии 7, которые создаются последовательно.
Благодаря этому GUID теперь лучше подходят для использования в реляционных базах данных.
Кроме того, при генерации нового GUID теперь можно передать
Ты уже начал использовать GUID версии 7?😏
👉 @KodBlog
GUID — глобально уникальный идентификатор) гарантирует уникальность значений между разными источниками.
В предыдущих версиях C# новые записи вставлялись в случайные позиции, что приводило к фрагментации индексов.
В .NET 9 появилась поддержка GUID версии 7, которые создаются последовательно.
Благодаря этому GUID теперь лучше подходят для использования в реляционных базах данных.
Кроме того, при генерации нового GUID теперь можно передать
DateTimeOffset, чтобы задать собственное значение временной метки.Ты уже начал использовать GUID версии 7?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤8
Чувствуешь, что отстаёшь в .NET?
Вот 10 лучших статей, которые помогут быстро наверстать:
👉 @KodBlog
Вот 10 лучших статей, которые помогут быстро наверстать:
🔸 Дорожная карта .NET-разработки на 2025 год (минималистичная версия)
↳ https://devsecrets.net/post/net-development-roadmap-minimalist-edition/🔸 10 фатальных ошибок .NET-разработчиков
↳ https://devsecrets.net/post/10-fatal-mistakes-net-developers-make/🔸 MediatR? Не в моём .NET-стеке
↳ https://devsecrets.net/post/mediatr-not-in-my-net-stack/🔸 Ноль опыта с Azure? Начни отсюда
↳ https://devsecrets.net/post/zero-azure-cloud-experience/🔸 Модульный монолит — архитектурный паттерн, о котором все забывают
↳ https://devsecrets.net/post/modular-monolith/🔸 Как справляться с неопределённостью при проектировании систем
↳ https://devsecrets.net/post/how-to-beat-uncertainty-when-designing-systems/🔸 7 мощных методов LINQ, о которых ты пожалеешь, что не знал раньше
↳ https://devsecrets.net/post/7-powerful-linq-methods/🔸 Исключения убивают приложения. Как с этим бороться
↳ https://devsecrets.net/post/throwing-exceptions-kills-apps/🔸 Как я выкатываю недоделанный код в прод (и почему тебе тоже стоит)
↳ https://devsecrets.net/post/how-i-push-unfinished-work-to-production/🔸 4 проверенных способа, как тесты выявляют ужасный код
↳ https://devsecrets.net/post/4-proven-ways-how-tests-reveal-awful-code/
Please open Telegram to view this post
VIEW IN TELEGRAM
😐7👍4❤2
Простой способ улучшить методы в C#
(с переменным числом параметров)
Используй улучшения ключевого слова
Ключевое слово
Раньше:
Теперь в C# 13 и .NET 9:
-
-
-
Это упрощает код и делает API гибче.
А ты уже используешь это улучшение?🤠
👉 @KodBlog
(с переменным числом параметров)
Используй улучшения ключевого слова
params из .NET 9.Ключевое слово
params в C# позволяет передавать переменное количество аргументов без необходимости перегрузки методов. Это удобно, когда количество входных параметров заранее неизвестно.Раньше:
params работал только с массивами.Теперь в C# 13 и .NET 9:
params можно использовать с любыми коллекциями, у которых есть метод Add, включая:-
Span<T>-
ReadOnlySpan<T>-
IEnumerable<T>Это упрощает код и делает API гибче.
А ты уже используешь это улучшение?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍13🔥3
90% C#‑проектов на старте не нуждаются в следующем:
🔸 Kubernetes
🔸 Микросервисах
🔸 Разделении БД на чтение/запись
В начале вам нужна простая и структурированная архитектура,
чтобы быстро двигаться и получать фидбэк от рынка и реальных пользователей.
Но при этом желательно предусмотреть базовый дизайн,
чтобы в будущем система могла эволюционировать.
Несколько месяцев назад я наткнулся на следующий репозиторий на GitHub:
Ссылка на репозиторий: https://github.com/evolutionary-architecture/evolutionary-architecture-by-example
Он показывает, как постепенно развивать архитектуру .NET‑приложения.
В нём выделено 4 этапа:
🔸 Начальная архитектура — фокус на простоте
🔸 Выделение модулей — фокус на поддерживаемости
🔸 Выделение микросервисов — фокус на масштабировании
🔸 Применение тактического DDD — фокус на сложности бизнес-домена
Архитектура начинается с малого,
но со временем развивается по мере роста требований.
Запомните:
👉 @KodBlog
В начале вам нужна простая и структурированная архитектура,
чтобы быстро двигаться и получать фидбэк от рынка и реальных пользователей.
Но при этом желательно предусмотреть базовый дизайн,
чтобы в будущем система могла эволюционировать.
Несколько месяцев назад я наткнулся на следующий репозиторий на GitHub:
"Evolutionary Architecture by Example"
Ссылка на репозиторий: https://github.com/evolutionary-architecture/evolutionary-architecture-by-example
Он показывает, как постепенно развивать архитектуру .NET‑приложения.
В нём выделено 4 этапа:
Архитектура начинается с малого,
но со временем развивается по мере роста требований.
Запомните:
Простота масштабируется. Сложность — ломается.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥5😁2🥴1
Использование Dapper
Я заметил, что есть отличные примеры для простых чтений, но практически нет примеров работы с более чем двумя JOIN'ами.
Это означает, что разработчику нужно хорошо разбираться как в SQL, так и в синтаксисе Dapper.
Пример:
👉 @KodBlog
Я заметил, что есть отличные примеры для простых чтений, но практически нет примеров работы с более чем двумя JOIN'ами.
Это означает, что разработчику нужно хорошо разбираться как в SQL, так и в синтаксисе Dapper.
Пример:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3