C# Development | YeaHub
743 subscribers
304 photos
33 videos
1 file
537 links
Теория, подготовка к интервью и курсы для C# разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #CSharp
🤔 Как вы делили микросервисы по доменным областям?

Сервисы группируют по аккуратным bounded context: пользователи, заказы, инвентарь, биллинг. Каждая область отвечает за свой контекст данных и бизнес-логику, хранит собственную БД. Это упрощает понимание, тестирование и развитие отдельных частей системы. При необходимости добавляют сервисы-агрегаторы для оркестрации.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2😁1
#полезное
🛞 LeftJoin будет поддерживаться в Entity Framework 10.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😘 Как сделать ужасный API-дизайн:

- Возвращай 200 OK с телом {"success": false}

А как лучше?

Используй Problem Details для обработки ошибок в API.

Хотя бы договоритесь в команде о едином формате ответов при ошибках.

Я видел API, которые возвращают 200 OK даже при ошибке в теле (да, это в сторону GraphQL-разработчиков).

Problem Details — это стандарт для описания ошибок в HTTP-ответах.

Обычных HTTP-статусов недостаточно, чтобы передать полезную информацию об ошибке.

Реализовать Problem Details в .NET — на самом деле просто.

Вот гайд: читать

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
😜 Authentication
Properties в
ASP.NET Core — недооценённый, но важный механизм

Если вы используете куки или OpenID Connect в ASP.NET Core, то наверняка сталкивались с объектом AuthenticationProperties. Он не просто "дополнительные параметры" — это мощный инструмент управления поведением аутентификации.

Что можно сделать с AuthenticationProperties:

• Установить срок действия куки:

new AuthenticationProperties { ExpiresUtc = DateTimeOffset.UtcNow.AddHours(1) }


• Указать URL возврата после логина:


new AuthenticationProperties { RedirectUri = "/dashboard" }


• Добавить временные метки, элементы состояния, флаги:
Например, IsPersistent, IssuedUtc, AllowRefresh, и кастомные значения.

• Используется в:

HttpContext.SignInAsync(...)

ChallengeAsync(...) для OIDC

редиректах после логина/логаута

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

Полный разбор:
https://blog.duendesoftware.com/posts/20250527-the-role-of-authenticationproperties-in-aspnet-core

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CSharp
🤔 В чём преимущества микросервисной архитектуры перед МОНОЛИТОМ?

Микросервисы позволяют развивать, развёртывать и масштабировать каждую бизнес-функцию независимо, снижая время выхода фичи. Они повышают устойчивость: сбой одного сервиса не останавливает всю систему. Также каждая команда может выбирать оптимальный стек технологий. Но требуют сложной инфраструктуры для оркестрации и мониторинга.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 Как защитить приложение от уязвимостей:

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

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

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

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

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😐 Dapper быстрый, но отображение отношений "один ко многим" может вызвать проблемы.

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

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

Как решить?

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😬 Как перестать усложнять проверки типов:

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

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#Собес #CSharp
🤔 Как решали проблему высокой нагрузки на БД при генерации отчетов?

Отчёты перенесли в отдельное аналитическое хранилище (Data Warehouse) с регулярным ETL из OLTP- базы. Для срочных отчётов использовали materialized view c incremental refresh либо pre-aggregated таблицы, обновляемые по расписанию. Часто применяли асинхронную генерацию через background job (Hangfire, Quartz) и кэширование результатов в Redis.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Хватит загружать строки в память только ради их удаления.

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое View (представление) в PostgreSQL?

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Я работаю с перечислениями каждый день.

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

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#полезное
🛞 Entity Framework 10 будет поддерживать именованные фильтры запросов

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🥄 PolySharp — удобный способ использовать новые фичи C# на старых версиях .NET. Этот NuGet-пакет работает как source-генератор, автоматически подбирая нужные полифиллы в зависимости от целевой платформы. Для работы достаточно добавить ссылку на PolySharp, установить последнюю версию C# и можно писать современный код даже для .NET Framework или UWP.

Инструмент обладает умной генерацией только необходимых типов. Например, если компилятору C# 13 нужен [IsExternalInit] для init-only свойств, PolySharp создаст его за кулисами. При этом он не трогает фичи, требующие поддержки рантайма, но покрывает огромный пласт синтаксических улучшений — от nullable-аннотаций до интерполированных строковых обработчиков.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое секционирование таблиц (table partitioning) в PostgreSQL?

Секционирование - это разделение таблицы на несколько меньших частей (секции), которые обрабатываются отдельно. Это повышает производительность запросов и облегчает управление большими обьемами данных.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Использование Dapper

Я заметил, что есть отличные примеры для простых чтений, но практически нет примеров работы с более чем двумя JOIN'ами.

Это означает, что разработчику нужно хорошо разбираться как в SQL, так и в синтаксисе Dapper.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #postgres
🤔 Что такое транзакции в PostgreSQL?

Транзакция - это последовательность операций, которые выполняются как единое целое. Если одна операция не удалась, все изменения откатываются, чтобы сохранить данные в консистентном состоянии. Транзакции поддерживают свойства ACID: атомарность, согласованность, изоляцию и долговечность.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😱 Простой способ улучшить методы в C#
(с переменным числом параметров)


Используй улучшения ключевого слова params из .NET 9.

Ключевое слово params в C# позволяет передавать переменное количество аргументов без необходимости перегрузки методов. Это удобно, когда количество входных параметров заранее неизвестно.

Раньше:
params работал только с массивами.

Теперь в C# 13 и .NET 9:
params можно использовать с любыми коллекциями, у которых есть метод Add, включая:

- Span<T>
- ReadOnlySpan<T>
- IEnumerable<T>

Это упрощает код и делает API гибче.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
😇 Как правильно структурировать фичу в формате вертикального среза?

Вот простая структура вертикального среза, которую можно смело брать на вооружение:

🟠Объект запроса/ответа
🟠Определение эндпоинта
🟠Бизнес-логика

Всё, что относится к одной фиче, находится в одном месте.

Почему это круто — объяснено здесь

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵‍💫 Вот настройка OpenTelemetry для трассировки и логирования в .NET:

Если хочешь узнать больше, то вот гайд как экспортировать телеметрию в Grafana

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM