C# Portal | Программирование
15.1K subscribers
749 photos
86 videos
19 files
663 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
𝗛𝘆𝗯𝗿𝗶𝗱𝗖𝗮𝗰𝗵𝗲 в .𝗡𝗘𝗧 𝟵

В .NET 9 появился новый API для кэширования — HybridCache.

Он решает ограничения IMemoryCache и IDistributedCache

Что он предлагает:

> Единый API (и для in-process, и для out-of-process кэша)
> Настраиваемую сериализацию
> Защиту от «штамповки» (stampede protection)
> Очистку кэша по тегам

Метод GetOrCreateAsync проверяет и основной, и вторичный кэш. Если значения нет — вызывает фабрику, сохраняет результат и возвращает его.

Stampede protection означает: на один ключ — только один вызов фабрики одновременно.

Вот как можно начать использовать HybridCache уже сегодня: read 😡

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥3
Игра в кальмара: 5 уроков выживания для .NET-разработчиков

Выживание в мире .NET — это не вопрос удачи.

Это вопрос стратегии.

Точно как в «Игре в кальмара», тут важен каждый выбор.

1. ИГРА «КРАСНЫЙ СВЕТ, ЗЕЛЁНЫЙ СВЕТ»

Врываешься в проект без обдуманной архитектуры?
🔴Красный свет.

Закладываешь масштабируемый и надёжный фундамент с самого начала?
🟢Зелёный свет.

Архитектура — твой первый шаг. Не замирай

2. ИГРА «СОТА»

Работа в запутанном коде — как вырезать фигуру из сахарной соты:
одно неловкое движение — и всё трещит по швам.

Пиши чистый, тестируемый код — тогда приложение не развалится под давлением

3. ИГРА «ПЕРЕТЯГИВАНИЕ КАНАТА»

Окружи себя сильными наставниками, коллегами и профессиональными сообществами.

Они помогут вытянуть тебя через самые сложные испытания

4. ИГРА «ШАРИКИ»

Технический долг — как игра в шарики:
кажется, что каждый костыль — мелочь, но они быстро накапливаются.

Если долго их игнорировать — можно проиграть всё.

Грамотное управление долгом удержит тебя в игре.

5. ИГРА «СТЕКЛЯННЫЙ МОСТ»

Учись на чужих ошибках.

Используй проверенные решения и библиотеки.

Не изобретай велосипед

Разработка на .NET — это игра, где важен каждый выбор

Играй с умом 😈

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6🔥3
IServiceScopeFactory vs IServiceProvider — что использовать для создания пользовательских скоупов?

Оба могут создавать скоупы, но ключевой момент в следующем:

IServiceProvider.CreateScope() просто получает IServiceScopeFactory и вызывает у него CreateScope()

Так что использование IServiceScopeFactory — более прямой подход.

Обычно пользовательские скоупы нужны, когда вы работаете с root-провайдером.

Вот решение на практике: тык

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
4🥴4👍2
This media is not supported in your browser
VIEW IN TELEGRAM
В режиме Ask в VScode ты можешь общаться напрямую с экспертами — так называемыми участниками (participants). Например, участник Remote-SSH может ответить на вопросы о разработке по SSH, помочь с настройкой окружения и даже разобраться с ошибками подключения 🤔

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥1🥴1
Как автоматически регистрировать Minimal API в ASP.NET Core

Регистрировать Minimal API вручную — работает, но плохо масштабируется.

Хочешь более чистый и автоматизированный подход?

Определи API-модули как static-классы
Используй рефлексию, чтобы найти и зарегистрировать все методы MapEndpoints
Централизуй регистрацию в едином цикле

Преимущества:

> Единая и понятная структура
> Легче разбивать на модули
> Меньше повторяющегося кода

Полный пример с кодом тут: here 🤙

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Устал вручную одобрять инструменты в agent mode?

Просто включи параметр chat.tools.autoApprove, чтобы все инструменты автоматически подтверждались.

Можно настроить это только для удалённой среды разработки — так ты получаешь удобство и хоть какую-то защиту от потенциально опасных действий.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4😐21😁1
Срочные новости в .NET 10 Preview 4

Теперь можно запускать C#-файлы без создания проекта

Команда .NET представила отличное нововведение — file-based apps.

Теперь можно напрямую запускать один .cs-файл командой:

dotnet run Program.cs


Без .csproj
Без шаблонов
Мгновенный запуск

Как в Python или JavaScript — .cs-файлы становятся самодостаточными исполняемыми скриптами. Подходит для прототипов, обучения и автоматизации.

И это не игрушка — можно даже запускать полноценный Web API с Minimal API прямо из одного файла.

Ключевые возможности:

👉Директивы на уровне файла:

• Подключение NuGet-пакетов
• Указание SDK
• Задание LangVersion

Пример:

#r "nuget: Humanizer, 2.14.1"
#sdk "Microsoft.NET.Sdk.Web"
#property LangVersion preview


👉 Поддержка shebang:

• Кроссплатформенные shell-скрипты

👉Поддержка Minimal API:

• Реальный Web API в одном .cs-файле

Если скрипт перерастает в полноценное приложение, его легко конвертировать в проект:

dotnet project convert Program.cs


И получаем чистую, структурированную основу для масштабирования

Доступно уже в .NET 10 Preview 4.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
23🤯12👍8🤔4🔥2
Диаграмма последовательности выполнения запроса в Entity Framework

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍4🥰3
Прекрати усложнять CQRS

> Тебе не нужны библиотеки
> Не нужны десятки слоёв
> Не нужны магические абстракции

Как должен работать CQRS:

> Query — просто запрос данных
> Command — просто инструкция изменить что-то
> Handler — просто код, который делает нужную работу

Ты можешь:

Написать свои IQueryHandler / ICommandHandler
Собрать простой pipeline с декораторами (логгинг, валидация)
Сохранить полный контроль над связями

CQRS работает лучше всего, когда он простой и явный.

Большинство реализаций ломаются, потому что начинают гнаться за ненужной сложностью.

Читать статью: тык

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥4
dotnet разработчики, те, кто не использует инструменты для маппинга — как вы вручную мапите объект на объект?

И почему выбрали именно такой подход? 🤔

Я собрал несколько популярных вариантов, начиная с :

> Пример маппинга через extension-методы
> Пример маппинга через конструктор
> Пример маппинга через статический метод:
> Пример маппинга через явный оператор
> Пример маппинга через неявный оператор

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132
Задана задача импортировать JSON-данные, структура которых не соответствует модели. На 1 фото показан один из способов импорта, при котором одно свойство игнорируется, а два столбца переименовываются.

Результаты

> Новая структура JSON
> Она соответствует нашей модели

На втором фото пример кода с использованием библиотеки FluentValidation для применения отдельных правил валидатора или всех правил — это может быть полезно для разных требований, а также при тестировании

Ставь лайк, если пост оказался полезным 💯

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2🤔2
Думаешь, хорошо разбираешься в ASP.NET Core middleware?

Этот пост поменяет твой взгляд на перехват HTTP-запросов

Middleware в ASP.NET Core — это компонент, участвующий в конвейере обработки HTTP-запросов и ответов.

Есть три подхода: на делегатах (inline), по соглашению (класс), и через IMiddleware для кастомной логики.

1️⃣Сначала можно использовать метод Use напрямую в конфигурации WebApplication.
Такое middleware на основе делегата выполняется до и после следующего компонента в конвейере.

2️⃣Если логика растёт — вынеси её в отдельный класс middleware по соглашению.
Класс должен иметь конструктор с RequestDelegate и метод InvokeAsync.

3️⃣Либо реализуй интерфейс IMiddleware — это более безопасный, проверяемый компилятором способ.
Зарегистрируй класс IMiddleware в DI-контейнере, и фреймворк сам будет его разрешать.

Но есть важные нюансы:

> Middleware по умолчанию живёт как singleton, поэтому внедряй только singleton-зависимости.
> Если нужны scoped-сервисы — передавай их через параметры InvokeAsync в middleware по соглашению.

Кастомные middleware используют для:

• логирования
• авторизации
• валидации
• модификации ответов

Какой подход к middleware ты используешь и почему? Напиши в комментах 😎

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍3🔥3
Как выполнить на 100% безопасную проверку с отрицанием условия?

Это проще, чем кажется.

Но в чём проблема со "старым" способом?

Оператор != может быть переопределён.

А это может привести к нежелательному поведению.

Зато с использованием отрицательного сопоставления с образцом (negated pattern matching) вы в безопасности.

Отрицательные шаблоны — это одна из новых возможностей, добавленных в C# за последние версии.

Они позволяют исключать определённые шаблоны с помощью ключевого слова not

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

С этим ваш код становится:

> Проще для понимания
> Читаемее

Но учтите:


Значение, к которому применяется выражение сопоставления, должно быть константным.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🤣1
Понимание архитектуры микросервисов

Задумывались ли вы, как компании вроде Netflix и Amazon внедряют новые функции с молниеносной скоростью? Секрет может крыться в их технологическом стеке, основанном на микросервисной архитектуре.

В основе микросервисной архитектуры лежит идея разделения приложения на набор небольших, слабо связанных сервисов. Каждый сервис запускается как отдельный процесс, имеет чётко определённый API, располагается в своей кодовой базе, управляется отдельной командой и развёртывается независимо.

Ключевые компоненты микросервисной архитектуры:

1. Load Balancer (балансировщик нагрузки): равномерно распределяет входящий сетевой трафик между серверами.
2. CDN (Content Delivery Network): распределённая сеть серверов, доставляющая контент пользователю на основе его геолокации — ускоряет загрузку страниц.
3. API Gateway: маршрутизирует входящие запросы к нужному микросервису через REST API или другие протоколы.
4. Management (управление): отвечает за мониторинг и координацию микросервисов, обеспечивая их стабильную работу и взаимодействие.
5. Microservices (микросервисы): каждый сервис реализует отдельную функцию, может взаимодействовать с другими через RPC (удалённый вызов процедур) и сам отвечает за хранение данных или состояния.

Преимущества:

Масштабируемость: можно масштабировать только нужные части приложения
Гибкость: каждый микросервис разрабатывается, развёртывается и масштабируется независимо
Устойчивость: сбой одного сервиса не выводит из строя всё приложение
Быстрая доставка: небольшие кодовые базы — более быстрый выпуск новых функций

Недостатки:

Сложность: больше сервисов — выше архитектурная сложность
Согласованность данных: сложно поддерживать целостность данных между сервисами
Сетевые задержки: взаимодействие между сервисами увеличивает время отклика
Обработка ошибок: сложно отследить, где именно произошла ошибка

Микросервисная архитектура — не панацея, но мощный инструмент в арсенале современной разработки.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62😁1
Ты, скорее всего, пропустил это улучшение в LINQ

Теперь вместо того чтобы использовать Skip и Take для пропуска и выборки определённого количества элементов из коллекции, можно обойтись только Take.

Начиная с .NET 6, у метода Take появилась новая перегрузка, которая поддерживает ещё одну крутую фичу — диапазоны (Ranges).

А что такое диапазоны?

Они появились в C# 8 и позволяют брать подмножество коллекции с помощью оператора .., задавая начальный и конечный индексы.

Начальный индекс включается, конечный — нет. Оба индекса имеют тип Index.

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

Но учти: если указать индекс, выходящий за пределы коллекции, будет выброшено исключение IndexOutOfRangeException

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
16🤣3