C# Portal | Программирование – Telegram
C# Portal | Программирование
14.9K subscribers
965 photos
118 videos
24 files
808 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
Существует малоизвестный многим программистам паттерн обработки ошибок под названием Result Pattern.

Result Pattern используется, чтобы избежать избыточного применения исключений при доменных валидациях. Этот паттерн инкапсулирует тип, добавляя состояние успеха и состояние ошибки.

Его можно применять для доменных валидаций, а также для асинхронных операций - например, запросов к базе данных или HTTP-запросов.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍154
Исключения и ошибки — это не одно и то же.

Почему в вашем коде вы обращаетесь с ними одинаково?

Это сильно влияет на архитектуру приложения.

Моё твёрдое убеждение:

исключения предназначены для исключительных ситуаций.


Что значит «исключительная ситуация»?

• Исключительная ситуация - вы достигли состояния в приложении, из которого нельзя восстановиться.
• Ошибка - ожидаемое состояние сбоя или нарушение предусловия.

Использовать исключения вместо ошибок —> бессмысленно.

Тем не менее многие разработчики делают это, выбрасывая исключения везде.

В результате они используют исключения для управления потоком —> это антипаттерн.

Решение:
• Явно представлять ошибки в коде и обрабатывать их.
• Бонус - явные ошибки делают намерения вашего кода прозрачными.

Подробнее: Functional Error Handling in .NET with the Result Pattern

И это лишь один из множества плюсов

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍174
Лучшие практики 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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Знаешь, что означает _ (подчёркивание) в C#?

Это символ для отбрасывания

Discards — это «заглушки», которые можно использовать, когда нужно объявить переменную, но её значение не требуется.

Отбрасывание означает игнорирование значения, возвращаемого методом или присвоенного переменной.

Особенно полезно при работе с параметрами out.

Ещё _ можно использовать для:

I. Отбрасывание элементов кортежа
II. Отбрасывание возвращаемых значений
III. pattern matching с discard
IV. в выражениях switch

Для чего ещё можно использовать _ ?

👉 @KodBlog
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133
Обновление поддержки .NET STS

Начиная с .NET 9 (текущий STS), поддержка STS-релизов увеличена с 18 месяцев до 2 лет.

Теперь STS-релизы теряют поддержку в тот же день, что и предыдущий LTS-релиз.

Это значит, что обновление до STS-релиза больше не приведёт к потере поддержки

Долгожданное улучшение для разработчиков, которым важно оставаться на актуальной версии без риска прерывания поддержки. ⌨️

https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/

👉 @KodBlog
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
Please open Telegram to view this post
VIEW IN TELEGRAM
😁212
У .NET-приложений больше нет оправдания быть нестабильными. Исправить это можно за пару минут.

Начиная с .NET 8, добавлять устойчивость в приложения стало гораздо проще, ведь появился обновлённый API Polly и официальные библиотеки от Microsoft для работы с отказоустойчивостью.

Polly — это библиотека для .NET, которая помогает обрабатывать временные ошибки и строить стратегии устойчивости: повторные попытки, fallback, таймауты, rate limiting и circuit breaker.

Хочешь узнать, как использовать Polly для создания resilience-пайплайнов? Вот статья со всеми деталями: Building Resilient Cloud Applications with .NET

А если ты работаешь с .NET Aspire, большая часть уже преднастроена «из коробки».

👉 @KodBlog
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):

- ProductStock не равен null
- Вы перебираете элементы в цикле
- Используется yield return внутри цикла

Вопрос: почему всё равно появляется предупреждение или ошибка?

Подумайте немного ⌚️

На слайде 2 — правильный ответ.

Причина в том, что yield return не останавливает выполнение цикла.

В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.

Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.

Классическая тонкость C# и знать её важно для собеседований.

👉 @KodBlog
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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥334👍2
Нужна ли сервисная дискавери и зачем

В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются

Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться

Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам

Для этого обычно нужен сервисный реестр — централизованное место, где сервисы регистрируют себя. Клиенты обращаются к реестру, чтобы получить актуальный физический адрес сервиса

Рабочий процесс выглядит так

1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес

В .NET это можно реализовать через Consul. Вот подробный туториал

Consul — популярное решение для распределенных систем

Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍2
Аутентификация подтверждает, кто вы. Авторизация решает, что вам разрешено делать.

В этом курсе вы научитесь создавать ASP.NET-приложения, которые умеют выдавать JWT, регистрировать и логинить пользователей, управлять ролями и многое другое. ☀️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Принесли ещё одну огромную подборку бесплатных API.

Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.

Забираем тут - publicapis.io 🍔

👉 @KodBlog
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴8👍5👎2🔥21
LLM в .NET проще, чем кажется

Создавать AI-приложения на .NET теперь легко. Примеры применения:

- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск

LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI. 🙂

Подробнее: тык

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍6