Существует малоизвестный многим программистам паттерн обработки ошибок под названием Result Pattern.
Result Pattern используется, чтобы избежать избыточного применения исключений при доменных валидациях. Этот паттерн инкапсулирует тип, добавляя состояние успеха и состояние ошибки.
Его можно применять для доменных валидаций, а также для асинхронных операций - например, запросов к базе данных или HTTP-запросов.
👉 @KodBlog
Result Pattern используется, чтобы избежать избыточного применения исключений при доменных валидациях. Этот паттерн инкапсулирует тип, добавляя состояние успеха и состояние ошибки.
Его можно применять для доменных валидаций, а также для асинхронных операций - например, запросов к базе данных или HTTP-запросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤4
Исключения и ошибки — это не одно и то же.
Почему в вашем коде вы обращаетесь с ними одинаково?
Это сильно влияет на архитектуру приложения.
Моё твёрдое убеждение:
Что значит «исключительная ситуация»?
• Исключительная ситуация - вы достигли состояния в приложении, из которого нельзя восстановиться.
• Ошибка - ожидаемое состояние сбоя или нарушение предусловия.
Использовать исключения вместо ошибок —> бессмысленно.
Тем не менее многие разработчики делают это, выбрасывая исключения везде.
В результате они используют исключения для управления потоком —> это антипаттерн.
Решение:
• Явно представлять ошибки в коде и обрабатывать их.
• Бонус - явные ошибки делают намерения вашего кода прозрачными.
Подробнее: Functional Error Handling in .NET with the Result Pattern
И это лишь один из множества плюсов
👉 @KodBlog
Почему в вашем коде вы обращаетесь с ними одинаково?
Это сильно влияет на архитектуру приложения.
Моё твёрдое убеждение:
исключения предназначены для исключительных ситуаций.
Что значит «исключительная ситуация»?
• Исключительная ситуация - вы достигли состояния в приложении, из которого нельзя восстановиться.
• Ошибка - ожидаемое состояние сбоя или нарушение предусловия.
Использовать исключения вместо ошибок —> бессмысленно.
Тем не менее многие разработчики делают это, выбрасывая исключения везде.
В результате они используют исключения для управления потоком —> это антипаттерн.
Решение:
• Явно представлять ошибки в коде и обрабатывать их.
• Бонус - явные ошибки делают намерения вашего кода прозрачными.
Подробнее: Functional Error Handling in .NET with the Result Pattern
И это лишь один из множества плюсов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤4
Лучшие практики REST API в 2025 году
Я построил более 100 API, вот чему научился
Большинство разработчиков испытывают сложности с дизайном REST API.
1. Уровни зрелости REST
• Level 0: Один эндпоинт (избегать)
• Level 1: Несколько ресурсов
• Level 2: Правильные HTTP-методы
• Level 3: HATEOAS (если нужно)
2. Именование ресурсов
• Используйте существительные: /users, /orders
• Не используйте глаголы: /getUsers, /createOrder
• Будьте последовательны: user-profiles или product-carts
• Избегайте: UserProfiles, userProfiles
3. HTTP-методы и коды статуса
Методы:
• GET → Чтение
• POST → Создание
• PUT/PATCH → Обновление
• DELETE → Удаление
Коды успешных ответов:
• 200: Успех
• 201: Создано
• 202: Принято (асинхронно)
• 204: Нет содержимого
Коды ошибок (клиент):
• 400: Некорректный запрос
• 401: Неавторизован
• 403: Запрещено
• 404: Не найдено
• 422: Ошибка валидации
Коды ошибок (сервер):
• 500: Внутренняя ошибка сервера
• 503: Сервис недоступен
4. Версионирование API
• URI: /api/v1/users
• Header: X-Api-Version
• Media Type: application/vnd.api.v1+json
• Query String: ?version=1 (избегать)
5. Лучшие практики для запросов/ответов
• Всегда используйте JSON
• Стандартизируйте ошибки
• Поддерживайте фильтрацию и пагинацию
• Документируйте через OpenAPI/Swagger
6. Чеклист безопасности
• HTTPS повсюду
• OAuth2/JWT аутентификация
• Ограничение числа запросов
• Валидация входных данных
• Кеширование ответов
Главный принцип -> делайте API простым и последовательным.
👉 @KodBlog
Я построил более 100 API, вот чему научился
Большинство разработчиков испытывают сложности с дизайном REST API.
1. Уровни зрелости REST
• Level 0: Один эндпоинт (избегать)
• Level 1: Несколько ресурсов
• Level 2: Правильные HTTP-методы
• Level 3: HATEOAS (если нужно)
2. Именование ресурсов
• Используйте существительные: /users, /orders
• Не используйте глаголы: /getUsers, /createOrder
• Будьте последовательны: user-profiles или product-carts
• Избегайте: UserProfiles, userProfiles
3. HTTP-методы и коды статуса
Методы:
• GET → Чтение
• POST → Создание
• PUT/PATCH → Обновление
• DELETE → Удаление
Коды успешных ответов:
• 200: Успех
• 201: Создано
• 202: Принято (асинхронно)
• 204: Нет содержимого
Коды ошибок (клиент):
• 400: Некорректный запрос
• 401: Неавторизован
• 403: Запрещено
• 404: Не найдено
• 422: Ошибка валидации
Коды ошибок (сервер):
• 500: Внутренняя ошибка сервера
• 503: Сервис недоступен
4. Версионирование API
• URI: /api/v1/users
• Header: X-Api-Version
• Media Type: application/vnd.api.v1+json
• Query String: ?version=1 (избегать)
5. Лучшие практики для запросов/ответов
• Всегда используйте JSON
• Стандартизируйте ошибки
• Поддерживайте фильтрацию и пагинацию
• Документируйте через OpenAPI/Swagger
6. Чеклист безопасности
• HTTPS повсюду
• OAuth2/JWT аутентификация
• Ограничение числа запросов
• Валидация входных данных
• Кеширование ответов
Главный принцип -> делайте API простым и последовательным.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍5
This media is not supported in your browser
VIEW IN TELEGRAM
SQLZap это настоящая находка
sqlzap.com это веб-платформа для практики SQL-запросов прямо в браузере. По сути, интерактивный симулятор.
Отлично подходит, чтобы прокачать навыки (как LeetCode, но для SQL)
👉 @KodBlog
sqlzap.com это веб-платформа для практики SQL-запросов прямо в браузере. По сути, интерактивный симулятор.
Отлично подходит, чтобы прокачать навыки (как LeetCode, но для SQL)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Знаешь, что означает _ (подчёркивание) в C#?
Это символ для отбрасывания
Discards — это «заглушки», которые можно использовать, когда нужно объявить переменную, но её значение не требуется.
Отбрасывание означает игнорирование значения, возвращаемого методом или присвоенного переменной.
Особенно полезно при работе с параметрами out.
Ещё
I. Отбрасывание элементов кортежа
II. Отбрасывание возвращаемых значений
III. pattern matching с discard
IV. в выражениях switch
Для чего ещё можно использовать
👉 @KodBlog
Это символ для отбрасывания
Discards — это «заглушки», которые можно использовать, когда нужно объявить переменную, но её значение не требуется.
Отбрасывание означает игнорирование значения, возвращаемого методом или присвоенного переменной.
Особенно полезно при работе с параметрами out.
Ещё
_ можно использовать для:I. Отбрасывание элементов кортежа
II. Отбрасывание возвращаемых значений
III. pattern matching с discard
IV. в выражениях switch
Для чего ещё можно использовать
_ ?Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍2
Каждый раз, когда разработчики жалеют о своих архитектурных решениях, причина чаще всего не в том, что дизайн был «неправильным».
Проблема в том, что они оптимизировали под будущие сложности, которые так и не возникли.
Именно поэтому всё больше команд выбирают подход «сначала монолит» с модульной архитектурой:
• Меньше движущихся частей на старте
• Проще создавать, деплоить и поддерживать
• Более стабильная и функциональная система
• Экономично
Каждый модуль в будущем может стать отдельным микросервисом. Такой подход даёт высокую гибкость и свободу для масштабирования.
Подробнее о модульном монолите
👉 @KodBlog
Проблема в том, что они оптимизировали под будущие сложности, которые так и не возникли.
Именно поэтому всё больше команд выбирают подход «сначала монолит» с модульной архитектурой:
• Меньше движущихся частей на старте
• Проще создавать, деплоить и поддерживать
• Более стабильная и функциональная система
• Экономично
Каждый модуль в будущем может стать отдельным микросервисом. Такой подход даёт высокую гибкость и свободу для масштабирования.
Подробнее о модульном монолите
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥6👍1
90% .NET-разработчиков управляют версиями NuGet самым сложным способом. 👊
Секрет работы с NuGet-пакетами в больших .NET-решениях это использовать Central Package Management (CPM).
Вместо того чтобы дублировать номера версий в каждом проекте, вы определяете их один раз в файле Directory.Packages.props.
После этого в проектах указывается только имя пакета — без версии.
Что это даёт
I. Единообразие по всей solution.
II. Одно место для обновления версии пакета.
III. Экономию времени при апгрейде .NET-версии.
Хватит тратить часы на поиски несовпадений версий. Управляйте пакетами централизованно и в одном месте.
P.S. Если в каком-то проекте нужна своя версия, всегда можно переопределить центральную.
👉 @KodBlog
Секрет работы с NuGet-пакетами в больших .NET-решениях это использовать Central Package Management (CPM).
Вместо того чтобы дублировать номера версий в каждом проекте, вы определяете их один раз в файле Directory.Packages.props.
После этого в проектах указывается только имя пакета — без версии.
Что это даёт
I. Единообразие по всей solution.
II. Одно место для обновления версии пакета.
III. Экономию времени при апгрейде .NET-версии.
Хватит тратить часы на поиски несовпадений версий. Управляйте пакетами централизованно и в одном месте.
P.S. Если в каком-то проекте нужна своя версия, всегда можно переопределить центральную.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3
Обновление поддержки .NET STS
Начиная с .NET 9 (текущий STS), поддержка STS-релизов увеличена с 18 месяцев до 2 лет.
Теперь STS-релизы теряют поддержку в тот же день, что и предыдущий LTS-релиз.
Это значит, что обновление до STS-релиза больше не приведёт к потере поддержки
Долгожданное улучшение для разработчиков, которым важно оставаться на актуальной версии без риска прерывания поддержки.⌨️
https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/
👉 @KodBlog
Начиная с .NET 9 (текущий STS), поддержка STS-релизов увеличена с 18 месяцев до 2 лет.
Теперь STS-релизы теряют поддержку в тот же день, что и предыдущий LTS-релиз.
Это значит, что обновление до STS-релиза больше не приведёт к потере поддержки
Долгожданное улучшение для разработчиков, которым важно оставаться на актуальной версии без риска прерывания поддержки.
https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Появилось расширение, которое добавляет эффекты из Elden Ring в вашу почту, LeetCode и GitHub
Теперь пулл реквесты ощущаются как битва с боссом🔨
Забираем с GitHub
👉 @KodBlog
Теперь пулл реквесты ощущаются как битва с боссом
Забираем с GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21❤2
У .NET-приложений больше нет оправдания быть нестабильными. Исправить это можно за пару минут.
Начиная с .NET 8, добавлять устойчивость в приложения стало гораздо проще, ведь появился обновлённый API Polly и официальные библиотеки от Microsoft для работы с отказоустойчивостью.
Polly — это библиотека для .NET, которая помогает обрабатывать временные ошибки и строить стратегии устойчивости: повторные попытки, fallback, таймауты, rate limiting и circuit breaker.
Хочешь узнать, как использовать Polly для создания resilience-пайплайнов? Вот статья со всеми деталями: Building Resilient Cloud Applications with .NET
А если ты работаешь с .NET Aspire, большая часть уже преднастроена «из коробки».
👉 @KodBlog
Начиная с .NET 8, добавлять устойчивость в приложения стало гораздо проще, ведь появился обновлённый API Polly и официальные библиотеки от Microsoft для работы с отказоустойчивостью.
Polly — это библиотека для .NET, которая помогает обрабатывать временные ошибки и строить стратегии устойчивости: повторные попытки, fallback, таймауты, rate limiting и circuit breaker.
Хочешь узнать, как использовать Polly для создания resilience-пайплайнов? Вот статья со всеми деталями: Building Resilient Cloud Applications with .NET
А если ты работаешь с .NET Aspire, большая часть уже преднастроена «из коробки».
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥2
Принесли настоящий клад для изучения алгоритмов —> репозиторий awesome-algorithms
Внутри собраны сайты, шпаргалки, книги, курсы и видео, подходящие как для новичков, так и для продвинутых. Полезная теория и разбор сложных задач (всё в одном месте)
👉 @KodBlog
Внутри собраны сайты, шпаргалки, книги, курсы и видео, подходящие как для новичков, так и для продвинутых. Полезная теория и разбор сложных задач (всё в одном месте)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😁6👍3
Вопрос для C#
Смотрим на код (слайд 1):
-
- Вы перебираете элементы в цикле
- Используется
Вопрос: почему всё равно появляется предупреждение или ошибка?
Подумайте немного⌚️
На слайде 2 — правильный ответ.
Причина в том, что
В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.
Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.
Классическая тонкость C# и знать её важно для собеседований.
👉 @KodBlog
Смотрим на код (слайд 1):
-
ProductStock не равен null- Вы перебираете элементы в цикле
- Используется
yield return внутри циклаВопрос: почему всё равно появляется предупреждение или ошибка?
Подумайте немного
На слайде 2 — правильный ответ.
Причина в том, что
yield return не останавливает выполнение цикла.В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.
Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.
Классическая тонкость C# и знать её важно для собеседований.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍11🔥3😁2
doc_2025-09-19_09-49-11.net-developer-resources.pdf
4.3 MB
Вышел бесплатный PDF с 650+ с отобранными вручную ресурсами для прокачки C#, .NET, ASP.NET Core, EF Core и микросервисов.
В сборнике собраны официальная документация, туториалы, лучшие блоги и видео, а также экспертные советы от .NET Technical Lead и Microsoft MVP с 11+ лет опыта.
Это не просто очередной PDF, а полный учебный гид для разработчиков, который поможет быстро прокачать знания и навыки.
За это и лайка не жалко🫡
👉 @KodBlog
В сборнике собраны официальная документация, туториалы, лучшие блоги и видео, а также экспертные советы от .NET Technical Lead и Microsoft MVP с 11+ лет опыта.
Это не просто очередной PDF, а полный учебный гид для разработчиков, который поможет быстро прокачать знания и навыки.
За это и лайка не жалко
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍12😁2
This media is not supported in your browser
VIEW IN TELEGRAM
После сильного падения трафика StackOverflow наконец-то совершил камбэк ❤️
Он запустил собственного ИИ-агента — stackoverflow.ai. Он отвечает только на основе проверенных ответов сообщества, подбирая прямые цитаты из них.
👉 @KodBlog
Он запустил собственного ИИ-агента — stackoverflow.ai. Он отвечает только на основе проверенных ответов сообщества, подбирая прямые цитаты из них.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33❤4👍2
Нужна ли сервисная дискавери и зачем
В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются
Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться
Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам
Для этого обычно нужен сервисный реестр — централизованное место, где сервисы регистрируют себя. Клиенты обращаются к реестру, чтобы получить актуальный физический адрес сервиса
Рабочий процесс выглядит так
1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес
В .NET это можно реализовать через Consul. Вот подробный туториал
Consul — популярное решение для распределенных систем
Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое
👉 @KodBlog
В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются
Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться
Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам
Для этого обычно нужен сервисный реестр — централизованное место, где сервисы регистрируют себя. Клиенты обращаются к реестру, чтобы получить актуальный физический адрес сервиса
Рабочий процесс выглядит так
1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес
В .NET это можно реализовать через Consul. Вот подробный туториал
Consul — популярное решение для распределенных систем
Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Принесли ещё одну огромную подборку бесплатных API.
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io🍔
👉 @KodBlog
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍2
Visual Studio 2026 показывает результаты условных операторов (if) прямо в коде во время отладки.
Скоро будет доступно⌨️
👉 @KodBlog
Скоро будет доступно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤40🔥11👏3🕊3
Динамическая сортировка в EF Core
Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.
Исходный проект: SortByColumnNameApp на GitHub
👉 @KodBlog
Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.
Исходный проект: SortByColumnNameApp на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴8👍5👎2🔥2❤1
LLM в .NET проще, чем кажется
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.🙂
Подробнее: тык
👉 @KodBlog
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.
Подробнее: тык
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6