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

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Интерактивный визуальный гид по математике и алгоритмам через концепты геймдева — https://redblobgames.com

Особое внимание уделите главам про теорию графов 💯

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104
Существует малоизвестный многим программистам паттерн обработки ошибок под названием 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