ch
Feedback
C# (C Sharp) programming

C# (C Sharp) programming

前往频道在 Telegram

По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ

显示更多

📈 Telegram 频道 C# (C Sharp) programming 的分析概览

频道 C# (C Sharp) programming (@csharp_ci) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 18 311 名订阅者,在 技术与应用 类别中位列第 7 339,并在 俄罗斯 地区排名第 36 883

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 18 311 名订阅者。

根据 14 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -10,过去 24 小时变化为 -7,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 18.97%。内容发布后 24 小时内通常能获得 7.27% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 3 472 次浏览,首日通常累积 1 331 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 0
  • 主题关注点: 内容集中在 .net, api, логика, архитектура, string 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ

凭借高频更新(最新数据采集于 15 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

18 311
订阅者
-724 小时
-27
-1030
帖子存档
☁️ Как на самом деле устроены инфраструктурные сервисы Yandex Cloud? Разработчики Yandex Cloud и Yandex Infrastructure расска
☁️ Как на самом деле устроены инфраструктурные сервисы Yandex Cloud? Разработчики Yandex Cloud и Yandex Infrastructure расскажут об этом 16 апреля на встрече для разработчиков, архитекторов и сетевых инженеров. В программе вас ждут реальные технические варианты реализации и опыт нетривиальных решений разработчиков платформы: — Инфраструктура как код для управления оповещениями: и никаких проблем — Развёртывание в ритме танго: как мы заменили оркестрацию процесса установки «хореографией» — Как мы оптимизируем вывод больших языковых моделей: кэширование, время отклика и ресурсы графических ускорителей — Как мы строили собственный сервис доставки контента и через что нам пришлось пройти? — Как мы работаем с уязвимостями на примере современных атак — Секретный доклад (онлайн трансляция не предусмотрена) Участники смогут обсудить самые “горячие” вопросы, технические варианты реализации и ошибки с разработчиками сервисов Yandex Cloud и другими участниками. Когда: 16 апреля офлайн в Москве и онлайн. Помимо экспертных докладов, офлайн участников ждут развлекательная программа, а тех, кто онлайн: инженерное соревнование в прямом эфире. Регистрируйтесь, чтобы послушать реальные истории от разработчиков, обменяться опытом и узнать, что скрыто под «капотом» инфраструктурных сервисов, а также какие планы у команды на будущее.

🚀 Динамические Claims в ASP.NET Core Хотите добавлять права пользователю прямо во время выполнения приложения? В ASP.NET Cor
🚀 Динамические Claims в ASP.NET Core Хотите добавлять права пользователю прямо во время выполнения приложения? В ASP.NET Core это можно сделать через Claims Transformation. Что это даёт: - можно подтягивать данные из базы или внешнего сервиса - добавлять их в HttpContext.User - строить гибкие политики авторизации То есть права пользователя можно расширять динамически, без изменения токена или повторной аутентификации. Пример из поста: Во время трансформации claims добавляется новый claim: CardType = "platinum" После этого можно создать policy: - пользователь должен быть аутентифицирован - у него должен быть claim CardType = platinum И использовать её в авторизации. Это особенно полезно для: - RBAC (role-based access control) - сложных систем прав - динамических разрешений из БД - feature-based доступа Например: - premium пользователь - платиновая карта - доступ к закрытому API - платные функции Claims Transformation позволяет подмешивать эти права на лету. Полная статья: https://milanjovanovic.tech/blog/master-claims-transformation-for-flexible-aspnetcore-authorization

👩‍💻 Открытый урок «Производительность кода на примере алгоритмов сортировки» 🗓 21 апреля в 20:00 МСК 🆓 На этом открытом у
👩‍💻 Открытый урок «Производительность кода на примере алгоритмов сортировки» 🗓 21 апреля в 20:00 МСК 🆓 На этом открытом уроке мы разберёмся, как скорость работы программы зависит от выбранного способа решения задачи - на понятном примере сортировки данных 🔍 Что вы узнаете на вебинаре: • Почему существует несколько способов выполнить одну и ту же задачу • Как разные подходы к сортировке данных влияют на скорость работы программы • Почему одни решения подходят для маленьких объёмов данных, а другие — для больших • Что происходит с программой, когда данных становится в 10, 100 или 1000 раз больше 🎯 Кому будет полезно: • Тем, кто только присматривается к профессии разработчика на C# • Новичкам, которые начали изучать C# и хотят понимать, как писать «быстрый» код • Всем, кто хочет разобраться, от чего зависит скорость работы приложений 🔗 Ссылка на регистрацию: https://otus.pw/GAHM/?erid=2W5zFGdMqeZ Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Что выведет на экран этот код?
Anonymous voting

#ПятничныйКвиз
#ПятничныйКвиз

FluentValidation делает валидацию входных данных очень простой. Знаете ли вы, что валидаторы поддерживают DI (Dependency Inje
FluentValidation делает валидацию входных данных очень простой. Знаете ли вы, что валидаторы поддерживают DI (Dependency Injection)? Можно внедрять объекты настроек, настроенные через DI, и использовать их прямо внутри валидаторов. Посмотрите пример в коде ниже.

👩‍💻 Открытый урок «Как работают структуры данных C# "под капотом"» 🗓 13 апреля в 20:00 МСК 🆓 На этом открытом уроке мы пр
👩‍💻 Открытый урок «Как работают структуры данных C# "под капотом"» 🗓 13 апреля в 20:00 МСК 🆓 На этом открытом уроке мы простым и понятным языком разберём структуры данных, что происходит внутри программы, когда она хранит и обрабатывает данные. Что рассмотрим на вебинаре: ✔ Внутреннее устройство ключевых коллекций ✔ Принципы работы и алгоритмическую сложность операций ✔ Особенности реализации, влияющие на производительность Кому будет полезно: ✔ Начинающим разработчикам - чтобы углубить понимание платформы .NET и писать эффективный, надёжный код. ✔ Тем, кто готовится к техническим собеседованиям (вопросы о внутреннем устройстве коллекций и сложности операций - классика интервью). ✔ Всем, кто хочет осознанно выбирать структуры данных - избегать типичных ошибок, понимать компромиссы и узкие места. 🔗 Ссылка на регистрацию: https://otus.pw/HE4y/?erid=2W5zFJNNR7F Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Разработчик показал, как использовать Ollama для извлечения данных из чеков прямо в .NET. Самая интересная часть оказалась не
Разработчик показал, как использовать Ollama для извлечения данных из чеков прямо в .NET. Самая интересная часть оказалась не в том, чтобы отправить изображение модели. Гораздо сложнее было получить результат, который можно реально использовать в коде. Обычный текстовый ответ мало помогает, когда нужны структурированные данные: - позиции из чека - количество - цены - итоговая сумма Поэтому вместо обычного ответа модель начали просить возвращать JSON. После этого результат можно сразу маппить в C#-объекты и использовать в приложении. И именно здесь начинается самое интересное. Большая часть работы — не код, а правильный prompt. Если модель: - округляла цену - пропускала цифру - или «придумывала» позицию приходилось уточнять инструкции. Это и есть главный сдвиг в таком подходе: раньше разработчик писал парсеры и regex, а теперь — настраивает поведение модели через prompt. Когда модель начинает возвращать структурированные данные, всё остальное снова превращается в обычный код приложения. Разбор полной реализации: https://milanjovanovic.tech/blog/how-to-extract-structured-data-from-images-using-ollama-in-dotnet #ai #ollama #dotnet #csharp

Vector Search - как это работает (и почему это важно для .NET разработчиков) Vector search ищет смысловую близость, а не прос
Vector Search - как это работает (и почему это важно для .NET разработчиков) Vector search ищет смысловую близость, а не просто точные совпадения. Он сравнивает данные - текст, изображения или аудио - используя векторные эмбеддинги в многомерном пространстве. То есть система ищет не одинаковые слова, а похожие по смыслу объекты. Почему это важно? Vector search лежит в основе многих AI-функций: - семантический поиск - рекомендательные системы - интеграции с LLM - умные ассистенты внутри приложений Добавив векторный поиск в приложение, разработчик может создавать намного более умные продукты, которые понимают смысл запросов пользователя. Это дает реальную бизнес-ценность - от поиска по документам до персонализированных рекомендаций. 📍 Полный пример реализации

🔵Ozon Tech приглашает на Community .NET Meetup 24 марта (вторник) в Москве (Лофт Casa Picassa) и онлайн. В программе три док
🔵Ozon Tech приглашает на Community .NET Meetup 24 марта (вторник) в Москве (Лофт Casa Picassa) и онлайн. В программе три доклада, много кейсов и камерная дискуссия без записи. В фокусе primitive obsession, нагрузка с Load Shedding и Escape Analysis в JIT. За подробной программой и регистрацией — сюда ⬅️

Есть более эффективный способ делать массовые обновления в EF Core. Начиная с EF Core 7 появился метод ExecuteUpdate, который
Есть более эффективный способ делать массовые обновления в EF Core. Начиная с EF Core 7 появился метод ExecuteUpdate, который позволяет обновлять записи напрямую на стороне базы данных. Вместо того чтобы загружать объекты в память, изменять их в цикле и затем вызывать SaveChanges, можно выполнить обновление одним SQL-запросом. Это значительно быстрее и снижает нагрузку на приложение, особенно при работе с большими таблицами. Однако есть важное условие: нужно заранее знать, какое поле вы обновляете и какое значение ему присваиваете, поскольку операция формируется как прямой SQL-update. Такой подход отлично подходит для массовых операций и оптимизации производительности в EF Core.

Что выведет на экран этот код?
Anonymous voting

#ПятничныйКвиз
#ПятничныйКвиз

C# records - идеальный способ создавать value objects. Почему это важно? В DDD value object должен: - быть неизменяемым (immu
C# records - идеальный способ создавать value objects. Почему это важно? В DDD value object должен: - быть неизменяемым (immutable) - сравниваться по значениям, а не по ссылке Именно это records дают из коробки. Что получаем: - неизменяемость через init - структурное сравнение (Value Equality) - короткий и чистый синтаксис - deconstruction - pattern matching Пример:

public class Booking
{
    public Address Address { get; init; }
    public DateRange Period { get; init; }
}

public record Address(
    string Street,
    string City,
    string State,
    string Country,
    string ZipCode);
Теперь два Address считаются равными, если совпадают их поля - без переопределения Equals и GetHashCode. Раньше для value object приходилось писать: • конструкторы • Equals • GetHashCode • оператор == Теперь - одна строка. Records делают value objects: • безопаснее • проще • ближе к функциональному стилю Если используете DDD в .NET - records должны быть стандартом для value objects.

Как меняется роль разработчика в 2026 году? AI стремительно меняет то, как создаются продукты и пишется код. Всё чаще обсужда
Как меняется роль разработчика в 2026 году? AI стремительно меняет то, как создаются продукты и пишется код. Всё чаще обсуждают не только новые инструменты, но и более фундаментальный вопрос: какой будет роль разработчика в ближайшие годы. 24 марта Mindbox проводит открытые дебаты, где эксперты по AI из SberDevices и Itsy обсудят, куда движутся технологии и как это влияет на работу инженеров. Что будет на встрече: — разговор о том, как на AI смотрят с двух сторон: со стороны бизнеса и со стороны разработки — возможность задать свои вопросы и обсудить их прямо во время дебатов — реальные идеи и практики, которые уже используют команды Если вам интересно, как меняется индустрия и какие навыки будут важны дальше — подключайтесь и приносите свои вопросы. Канал Сергея Маркова Канал Никиты Архипова 📅 24 марта ⏰ 19:00–20:30 мск 📍 Онлайн, бесплатно 👉 Зарегистрироваться Реклама. ООО «Майндбокс», ИНН: 7713688880, erid: 2W5zFGn2zp1

В .NET 8 появился простой способ сделать HttpClient устойчивым к сбоям — буквально одной строкой. Microsoft добавила библиоте
В .NET 8 появился простой способ сделать HttpClient устойчивым к сбоям — буквально одной строкой. Microsoft добавила библиотеку Microsoft.Extensions.Http.Resilience, в которой уже есть готовые pipeline’ы для обработки ошибок при HTTP-запросах. Что это даёт из коробки: - Retry при временных сбоях - Timeout - Circuit Breaker - Rate limiting - Защиту от перегрузки Подключается максимально просто:

services.AddHttpClient<GitHubService>(static httpClient =>
{
    httpClient.BaseAddress = new Uri("https://api.github.com/");
})
.AddStandardResilienceHandler();

⚡️ Exceptions - это для действительно исключительных ситуаций. Но в реальном приложении они все равно будут случаться, и их н
⚡️ Exceptions - это для действительно исключительных ситуаций. Но в реальном приложении они все равно будут случаться, и их нужно обрабатывать предсказуемо. Самый удобный способ в ASP.NET Core - сделать глобальный обработчик через middleware: - перехватываем любые необработанные исключения - логируем ошибку - возвращаем клиенту единый JSON-ответ (ProblemDetails) с 500 Пример:

public class ExceptionHandlingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<ExceptionHandlingMiddleware> _logger;

    public ExceptionHandlingMiddleware(
        RequestDelegate next,
        ILogger<ExceptionHandlingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception exception)
        {
            _logger.LogError(
                exception, "Exception occurred: {Message}", exception.Message);

            var problemDetails = new ProblemDetails
            {
                Status = StatusCodes.Status500InternalServerError,
                Title = "Server Error"
            };

            context.Response.StatusCode =
                StatusCodes.Status500InternalServerError;

            await context.Response.WriteAsJsonAsync(problemDetails);
        }
    }
}

🖥 Разделяйте код с помощью Domain Events Без событий сервисы быстро превращаются в «комбайн»: — бизнес-логика — отправка ema
🖥 Разделяйте код с помощью Domain Events Без событий сервисы быстро превращаются в «комбайн»: — бизнес-логика — отправка email — аналитика — интеграции — и всё в одном методе Каждая новая функция добавляет прямые зависимости. Метод растёт. Связанность увеличивается. Поддержка усложняется. С Domain Events подход меняется: Вы выполняете бизнес-действие и просто публикуете событие.

await _domainEventsDispatcher.DispatchAsync(
    [new UserRegisteredDomainEvent(user.Id, user.Email)]
);
Дальше система реагирует сама: - отправка приветственного письма - трекинг в аналитике - интеграции - любые новые сценарии И всё это без изменения UserService. Преимущества: - никаких жёстких зависимостей - сервисы меньше и чище - легче тестировать - проще масштабировать - новые фичи добавляются без переписывания существующего кода Публикуешь один раз - система расширяется сама.

💡 Soft delete в EF Core без лишней логики в сервисах Удалять данные физически — не всегда хорошая идея. Логи, аудит, восстан
💡 Soft delete в EF Core без лишней логики в сервисах Удалять данные физически — не всегда хорошая идея. Логи, аудит, восстановление, аналитика — всё это требует soft delete. Вот удобный способ реализовать его через EF Core interceptor. Что делает перехватчик: - Проверяет ChangeTracker на сущности с интерфейсом ISoftDeletable - Если состояние сущности — Deleted - Меняет его на Modified - Устанавливает: - IsDeleted = true - DeletedOnUtc = DateTime.UtcNow В итоге: Вы вызываете обычный:

context.Remove(entity);
А в базе: - запись не удаляется - просто помечается как удалённая Плюсы подхода: - никакой логики soft delete в сервисах и репозиториях - единая точка обработки - чистый доменный код - безопасное удаление по всему приложению Важно: Если у вас есть связанные сущности (navigation properties), перехватчик нужно дополнительно расширить — каскадное soft-удаление EF Core не делает автоматически. Soft delete через interceptor — это один из самых чистых production-подходов для EF Core. #dotnet #EFCore #Backend #Architecture #CSharp

🖥 Асинхронщина ломает интеграционные тесты? Есть простой паттерн Проблема: Вы отправляете событие в одном модуле… И начинает
🖥 Асинхронщина ломает интеграционные тесты? Есть простой паттерн Проблема: Вы отправляете событие в одном модуле… И начинаете ждать. Если используете Thread.Sleep — готовьтесь к: - медленным тестам - flaky-падениям - ненависти от CI/CD Решение — Retry Assertion (Polling) Как работает паттерн: 1. Выполняем команду (Module A) 2. Периодически опрашиваем состояние (Module B) 3. Ждём, пока результат появится 4. Делаем assert Схема: - Execute Command (Module A) - Poll Query (Module B) until result != null - Assert Почему это лучше: - Нет случайных падений - Тесты работают быстрее - Полностью детерминированное поведение - Отлично подходит для async, событий и modular monolith Главная идея: Не жди фиксированное время — жди состояние. Такой подход превращает нестабильные интеграционные тесты в надёжные и быстрые.