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

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
Новый API для поддержки динамически генерируемых схем OpenAPI в документации, появившийся в ASP.NET 10 Preview 4

🐸🐸

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
Совет по LINQ:

Вызывай ToList() после фильтрации, а не до.

Почему?

> В первом случае всё загружается в память до фильтрации
> Во втором — фильтрация происходит на источнике, что лучше для БД или больших коллекций
> Особенно важно при работе с EF Core или API, использующих IQueryable

🎉🎉

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥5😁5🤯1
вопрос в том, быть или не быть

отсылка к знаменитой сцене с Гамлетом

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
😁256👍52🤔2
ASP dotnet: кастомный файл инструкций для GitHub Copilot

Создание файла copilot-instructions.md позволяет задать дополнительные инструкции для Copilot, чтобы его ответы были адаптированы под конкретный репозиторий.

Выше — фрагмент текущего файла инструкций для репозитория dotnet/aspnetcore, который был слит менее часа назад.

Эта функция сейчас находится в превью и поддерживается в Copilot Chat для Visual Studio, VS Code и на сайте GitHub. Также поддерживается агентом Copilot для написания кода.

Что думаете? 💪

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
This media is not supported in your browser
VIEW IN TELEGRAM
Часто при создании моделей я сначала пишу их в одном файле, а уже потом с помощью ReSharper быстро раскидываю каждую модель в отдельный файл — буквально в пару кликов мышкой.

Такой подход лично для меня удобнее:

> не нужно сразу прыгать между десятками файлов
> всё видно и правится в одном месте
> а уже потом ReSharper сам всё красиво разносит по файлам

— Гайд: Как ReSharper разносит классы по файлам

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍6
Следует ли перестать использовать случайные UUID в .NET?

Традиционные UUID (Guid.NewGuid()) являются случайными — это хорошо для уникальности, но плохо с точки зрения производительности базы данных.

Они вызывают:

> Дорогую переработку индексов
> Плохую производительность при вставке
> Высокую фрагментацию

Поэтому многие разработчики перешли на ULID — 128-битные, сортируемые и по-прежнему уникальные.

Они сохраняют временной порядок, что делает их более дружелюбными к индексам.

Но теперь появилось новое:

Guid.CreateVersion7() в .NET 9

UUID версии 7 упорядочены по времени и совместимы с ULID, без необходимости в сторонних пакетах.

Вы получаете преимущества ULID, но с нативной поддержкой в .NET.

Перейдёте ли вы с ULID на UUID V7? 🤔

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥123👍3🥴2
Хочешь поднять свой TCP / UDP / WebSocket сервер без ASP.NET?

SuperSocket — фреймворк для .NET с мощной архитектурой

—> TCP, UDP, WebSocket из коробки
—> Свои протоколы через pipeline-фильтры
—> Middleware, сессии, команды, DI, логи
—> Кроссплатформенный, high-perf, MIT

💖

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥1
Кэширование решает проблемы кэширования.

А дальше остаются проблемы, которые кэш не решает.

Я использую паттерн Cache-Aside (он же ленивая загрузка) для ускорения API.

Как это работает:

> Если данные есть в кэше → вернуть их
> Если нет → взять из базы данных и положить в кэш

Это происходит, когда:

> Данные ещё не кэшированы
> Кэш истёк или был очищен

Простой способ повысить производительность при чтении.

Вот короткий гайд, как применить это в своём приложении: тут

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🍌2😁1🤔1
99% разработчиков ошибаются в обработке исключений

А вот что делает оставшийся 1%:

Они используют глобальный обработчик исключений.

Начиная с .NET 8, можно создать класс, реализующий IExceptionHandler, чтобы перехватывать все необработанные исключения.

Внутри обработчика можно залогировать исключение и вернуть ProblemDetails клиенту API.

Можно также зарегистрировать несколько реализаций IExceptionHandler — они будут вызываться в порядке регистрации.

Предсказать все исключения невозможно.

Но можно перехватить их все в одном месте.❤️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113👏3😐2😁1
В ASP.NET 10 появится поддержка Passkey 🥳

Passkey — это новый способ входа в систему без пароля, основанный на стандартах FIDO2/WebAuthn.

Вместо ввода пароля, пользователь подтверждает вход с помощью:

> Face ID или Touch ID (на телефоне или ноутбуке)
> PIN-кода
> внешнего ключа безопасности (например, YubiKey)

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🎉32🤔2
20 идей для пет-проектов на .NET

Хочешь прокачаться — пиши реальные приложения

> Трекер личных финансов
> Трекер привычек
> Журнал тренировок
> To‑Do список
> Дашборд погоды
> Простая блог-платформа
> Мини-соцсеть
> Фото-галерея
> Онлайн-магазин
> Генератор счетов
> Умный подбор рецептов
> Сокращатель ссылок
> Планировщик встреч
> Канбан-доска для команды
> Система управления документами
> Приложение для записи на приём
> Сервис вызова такси
> Сайт для поиска работы
> Сравнение резюме с вакансиями
> Дашборд для умного дома

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😁1
Clean Architecture by Pedro Constantino

Clean Architecture — это не только про принципы, но и про ясную структуру, которая делает проект масштабируемым, тестируемым и удобным в поддержке

> источник

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥2
Времена жизни (Lifetimes) в .NET DI:

> Singleton — один экземпляр на всё приложение
> Scoped — один экземпляр на каждый запрос
> Transient — новый экземпляр каждый раз при запросе

Важно помнить:

– Нельзя внедрять Scoped/Transient в Singleton — это может привести к утечкам памяти
– Используй Singleton только для безсостояний или потокобезопасных сервисов

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104
Хочешь сделать .NET-приложение более устойчивым?

Вот 4 простые стратегии:

> Retry — повторить попытку после сбоя
> Timeout — прекратить ожидание после тайм-аута
> Fallback — вернуть безопасное значение
> Circuit breaker — заблокировать постоянные сбои

Эти приёмы помогают справляться с временными ошибками и не падать при каждом чихе.

Раньше для этого чаще всего использовали Polly.

🆕 А в .NET 8 появилась новая Microsoft Resilience Library, построенная поверх Polly.

Хочешь разобраться глубже?

Вот как повысить устойчивость твоего приложения > read

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3💯2
Создание кастомного GPT в ChatGPT может быть крайне полезным.

Например, разработчик хочет заменить SqlClient-операции на Dapper и ему предстоит проделать это множество раз.
С помощью кастомного GPT можно избежать постоянного ввода промптов — достаточно просто вставить код и получить результат.

В этом случае я создал инструкцию в Microsoft Word, сохранил её в PDF и загрузил в кастомного GPT 💪

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥2
Я больше 6 лет работаю с Clean Architecture — и вот почему она мне реально зашла

Самая большая проблема в энтерпрайз-проектах — бардак в структуре.

Каждый делает по-своему:

> Свои слои, свои подходы, свои велосипеды.
> Знания с проекта на проект не переносятся.

Clean Architecture это чинит.

Это не про количество проектов или навороченные паттерны.
Это про направление зависимостей.

> Внутренние слои (domain, application) описывают абстракции.
> Внешние (infrastructure, UI) — их реализуют.
Никогда наоборот.

Вот и всё. Всё остальное — вариации:

> Классические слои: domain / app / infra / web
> Вертикальные срезы по фичам
> Или компоненты, которые сочетают и то, и другое

Любая схема работает, если держаться этого правила.

Что в итоге получаешь:

Модули, которые легко переиспользовать
Понятное разделение, кто за что отвечает
Логика легко покрывается тестами
Новым людям проще влиться
Компоненты слабо связаны — меньше проблем при изменениях

Clean Architecture реально помогает выпускать продуманный, поддерживаемый код. Я ей продолжаю пользоваться — потому что это просто работает.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥6👍3
Как я импортировал более 5 000 000 записей в базу данных:

(за 89 секунд)

Недавно мне нужно было выполнить большую миграцию данных.

После изучения доступных вариантов я выбрал SQLBulkCopy.

SQLBulkCopy позволяет импортировать большие объёмы данных напрямую в таблицы SQL Server.

Также он поддерживает транзакции — можно откатить весь импорт в случае ошибки.

У меня нет бенчмарков, но в моём случае импорт завершился за 89 секунд 💪

P.S. Вы использовали SQLBulkCopy?

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🤔3🔥1
В .NET 10 снижена «надбавка» за использование IEnumerable с 83% до 10%

В .NET 9 перебор массива через IEnumerable обходился на 83% дороже, чем прямой перебор массива, тогда как в .NET 10 эта разница составила всего 10% 👏

Что думаете?

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍142
This media is not supported in your browser
VIEW IN TELEGRAM
Вот топовый инструмент от Microsoft

dotnet/interactive
— даёт тебе интерактивные ноутбуки с поддержкой C#, F#, PowerShell, SQL и даже JS в одном файле 😮

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

Работает в Jupyter и VS Code. Подходит для обучения, исследований и просто кайфового кодинга.

Советую заценить — реально мощная штука для .NET-разработчиков

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1
𝗛𝘆𝗯𝗿𝗶𝗱𝗖𝗮𝗰𝗵𝗲 в .𝗡𝗘𝗧 𝟵

В .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