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

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
Как защитить приложение от уязвимостей:

(всего в 4 строках кода)

Используйте ASP.NET Core 8 Identity

ASP.NET Core 8 Identity вводит новые API, упрощающие реализацию входа и управление учетными записями.

С минимальными усилиями вы можете защитить Web API, добавив аутентификацию и авторизацию.

После быстрой настройки (всего в несколько строк кода) вы автоматически получаете готовые эндпоинты для:

двухфакторной аутентификации
входа в систему
регистрации
сброса пароля
подтверждения email

Безопасность это не то, что стоит реализовывать с нуля самостоятельно.

Выше пример, как это настроить

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍126
Одна из полезных фичcollection expressions.

С ними:

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

Фича небольшая, но сильно улучшает читаемость.
Если не пробовал, стоит глянуть. 🎧

Посмотри, как это работает + ещё 8 советов по чистому коду: читать

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🔥2👀1
Если ты всё ещё пишешь фабрики в 2025 — ты оверинжинириш.

В .NET 8 появились Keyed Services более чистый и быстрый способ разрешать зависимости с минимумом шаблонного кода.

Без кастомных фабрик
Без if-else или switch
Нативная поддержка в DI-контейнере

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

Без лишнего кода. Без лишней абстракции. Просто чистый DI.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🤔132🥴2🤣1
Dapper быстрый, но отображение отношений "один ко многим" может вызвать проблемы.

В чём проблема?

SQL-join возвращает дублированные данные с "одной" стороны, а Dapper отдаёт по одной строке за раз.

Как решить?

Используйте Dictionary<TKey, TEntity>, чтобы отслеживать и повторно использовать родительские объекты при добавлении дочерних элементов.

Это просто, как только вы освоите шаблон.

Вот чистый пример: ссылка на статью

Вы сталкивались с этой проблемой при использовании Dapper? 🥰

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥73👍2
Как перестать усложнять проверки типов:

(и назначать переменные с ненулевыми значениями)

Используйте шаблон объявления (declaration pattern).

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

Также можно объявить локальную переменную как результат этой проверки.

Пример использования шаблона объявления в коде выше.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1511😁3
Хватит загружать строки в память только ради их удаления.

В EF Core теперь есть поддержка массового удаления через ExecuteDelete().

- Пиши LINQ-запрос для фильтрации записей
- Чейни несколько Where-условий
- Вызывай ExecuteDelete(), чтобы выполнить один SQL DELETE

Без трекинга, без материализации. Только SQL.

👉 Как это использовать (и на что стоит обратить внимание) — читать

Ты уже используешь массовое удаление (или обновление) в своих проектах?

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93
45 вопросов для подготовки к собеседованию по C#

Реальные вопросы, не сгенерированные ИИ

1. В чём разница между readonly и const?
2. Для чего используется ключевое слово sealed?
3. Перечисли все модификаторы доступа для типов.
4. В чём разница между interface и abstract class?
5. Когда вызывается статический конструктор?
6. Как создать метод расширения?
7. Поддерживает ли C# множественное наследование классов?
8. Объясни, что такое упаковка (boxing) и распаковка (unboxing).
9. Что такое куча (heap) и стек (stack)?
10. В чём разница между string и StringBuilder?
11. Как создать дату с заданным часовым поясом?
12. Как изменить текущую культуру (CultureInfo)?
13. В чём разница между HashSet и Dictionary?
14. Какова цель метода ToLookup?
15. Создаёт ли метод LINQ Cast<T> новый объект?
16. Объясни отложенное выполнение (deferred execution) в LINQ.
17. Как работает ImmutableList?
18. Какие преимущества дают замороженные коллекции (Frozen collections)?
19. Назови потокобезопасные коллекции.
20. Как реализовать lock в асинхронном коде?
21. Перечисли все способы создания нового потока.
22. Как выполнить несколько async-задач одновременно?
23. Объясни разницу между наследованием и композицией.
24. В чём отличие class, record и struct?
25. Для чего используются ref struct?
26. Назови две формы record.
27. Для чего используется ключевое слово with?
28. Какова цель первичных конструкторов (Primary Constructors)?
29. Объясни, как работают nullable reference types (nullable-ссылочные типы).
30. Есть ли ограничения по возвращаемому типу у switch-выражений?
31. Для чего используется yield return?
32. Сколько поколений у сборщика мусора (GC)?
33. Для чего используется класс Interlocked?
34. Какой код компилятор генерирует для автосвойств (auto-properties)?
35. Как реализуется полиморфизм в C#?
36. Как реализуется инкапсуляция в C#?
37. В чём разница между параметрами ref и out?
38. Как работает оператор using?
39. Что такое delegate и как он используется?
40. Объясни перегрузку и переопределение методов.
41. В чём разница между IEnumerable и IQueryable?
42. Что такое expression trees в LINQ?
43. Как работает обработка исключений в C#?
44. Назови все способы повторной генерации исключения (rethrow).
45. Объясни, что такое обобщения (generics).

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
25🔥9👍6🌭1
Базовая настройка fanout-обмена с клиентом RabbitMQ для .NET

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95
Эта фича показала мне, насколько PostgreSQL крут.

Думаю, тебе тоже понравится.

В одном проекте мне нужно было за одну операцию вставить 5 тысяч записей.

Хранилищем был Postgres, и, естественно, всё должно было работать быстро.

После небольшого ресёрча я наткнулся на команду COPY.

Эта команда позволяет выполнять массовую вставку данных напрямую в базу.

Метод BINARY COPY отправляет данные в бинарном формате, который Npgsql декодирует, и после вызова Complete() данные сохраняются в БД.

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

Что скажешь? 🙂

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍154🤔4
Лучшая фича в ASP.NET Core 10 на сегодняшний день

Server-Sent Events (SSE)
Простая альтернатива SignalR 👇

Если тебе нужно реализовать обновления в реальном времени в .NET-приложении — с сервера на клиент, есть несколько подходов:

• Polling — фронтенд регулярно запрашивает сервер на наличие новых данных
• SignalR — клиент подписывается на событие, сервер пушит его через WebSockets
• Server-Sent Events (уже доступны в превью .NET 10)

Постоянный опрос каждые несколько секунд может перегружать сервер и тратить трафик впустую, а WebSockets через SignalR — это избыточно для простых однонаправленных обновлений.

Server-Sent Events (SSE) — это легковесный и стабильный способ стримить данные от сервера к клиенту в одну сторону, без всей сложности двусторонних протоколов.

В этой статье покажут, как сделать "Live Stock Market" — обновления котировок в реальном времени на сервере и клиенте.

➡️Как работает SSE и зачем это нужно
➡️Реализация SSE-эндпойнта с помощью Minimal API
➡️Тестирование SSE-стрима через HTTP-запрос (HTTP Request file) в IDE
➡️Создание простого фронтенда для проверки SSE
➡️Ключевые отличия между SSE и SignalR (WebSockets)

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥12👍7
Я работаю с перечислениями каждый день.

И вот 4 лучших практики, которыми я пользуюсь, чтобы код в проекте оставался чистым:

🔸Явно указывать тип хранения

🔸Использовать атрибуты Description для отображаемых имён

🔸Хелпер-метод для получения значения из атрибута Description

🔸Безопасный парсинг через TryParse

А что бы ты добавил к этому списку?

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍5🤨1
Entity Framework 10 будет поддерживать именованные фильтры запросов

Да, это означает, что несколько фильтров теперь можно применять одновременно, начиная с EF 10+ — при условии, что они именованные. 👍

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125🤯2
This media is not supported in your browser
VIEW IN TELEGRAM
Необходимый репозиторий с сотнями бесплатных API для практики программирования и создания проектов.

Обновляется еженедельно и разделён по темам 🔫

http://github.com/public-apis-dev/public-apis

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍165
Правильный способ построения асинхронных API в .NET

Большинство API работают по простому шаблону:

🔸Клиент отправляет запрос
🔸Сервер выполняет работу
🔸Сервер возвращает ответ

Такой подход отлично работает для быстрых операций — например, получения данных или простых обновлений.

А что насчёт длительных операций?

Речь о задачах вроде:

> обработки больших файлов
> генерации отчётов
> конвертации видео

Такие процессы могут занимать от нескольких минут до часов.

Вот как можно правильно строить асинхронные API: читать

Как сообщить клиенту, что его запрос обработан?

Есть два подхода:

🔸PULL — клиент опрашивает API, чтобы узнать статус

🔸PUSH — сервер сам уведомляет клиента (через WebSocket, email и т.д.)

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2
𝟭𝟬 шагов для оптимизации запросов в EF Core

Даже сеньоры знают не все из них

Допустим, у тебя в проде тормозит EF Core-запрос.

Как бы ты исследовал и починил проблему?

Вот пошаговый подход: ( смотри иллюстрации )

А вот как начать работу с OpenTelemetry:
ссылка

Как Антон оптимизировал реальный запрос EF Core Query с 30 секунд до 30 миллисекунд:
ссылка

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2