fa
Feedback
C# (C Sharp) programming

C# (C Sharp) programming

رفتن به کانال در Telegram

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

نمایش بیشتر

📈 تحلیل کانال تلگرام C# (C Sharp) programming

کانال C# (C Sharp) programming (@csharp_ci) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 18 302 مشترک است و جایگاه 7 331 را در دسته فناوری و برنامه‌ها و رتبه 36 951 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 18 302 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 11 ژوئن, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -27 و در ۲۴ ساعت گذشته برابر 6 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 16.94% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 8.35% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 3 100 بازدید دریافت می‌کند. در اولین روز معمولاً 1 528 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 0 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند .net, api, логика, архитектура, string تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 12 ژوئن, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

18 302
مشترکین
+624 ساعت
-27 روز
-2730 روز
آرشیو پست ها
Что выведет на экран этот код?
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 Главная идея: Не жди фиксированное время — жди состояние. Такой подход превращает нестабильные интеграционные тесты в надёжные и быстрые.

Динамическая строка подключения в EF Core - когда и зачем это нужно Факт В EF Core можно задать connection string динамически
Динамическая строка подключения в EF Core - когда и зачем это нужно Факт В EF Core можно задать connection string динамически при регистрации DbContext. Для этого используется делегат, который выполняется в момент получения контекста из DI. Как это работает При регистрации DbContext вы передаёте функцию, которая получает IServiceProvider. Внутри неё можно: - получить любой сервис - определить текущего пользователя или tenant - выбрать нужную базу данных - и только после этого установить строку подключения Пример

builder.Services.AddDbContext<OrdersDbContext>((sp, o) =>
{
    var tenantProvider = sp.GetRequiredService<TenantProvider>();
    var connectionString = tenantProvider.GetConnectionString();

    o.UseSqlServer(connectionString);
});
Dynamic DbContext configuration - ключевой паттерн для масштабируемых multi-tenant систем. Если приложение растёт и базы начинают разделяться по клиентам или регионам, этот подход становится стандартом архитектуры.

⚡️ Async-коммуникация ломает интеграционные тесты. Вы отправляете событие в одном модуле… и что дальше? Ждать? Если используе
⚡️ Async-коммуникация ломает интеграционные тесты. Вы отправляете событие в одном модуле… и что дальше? Ждать? Если используете Thread.Sleep — готовьтесь к: - медленным тестам - flaky-поведению - падениям в CI/CD Решение — не ждать. Опрос (Polling). Я использую паттерн Retry Assertion для тестирования асинхронного взаимодействия между модулями: Как это работает: 1. Выполняем команду (Модуль A) 2. Периодически выполняем запрос (Модуль B) 3. Ждём, пока результат появится 4. Делаем assert Пример:

var userId = await Sender.Send(new RegisterUserCommand(...));

var result = await Poller.WaitAsync(
    TimeSpan.FromSeconds(15),
    async () =>
    {
        return await Sender.Send(new GetCustomerQuery(userId));
    });

result.Should().NotBeNull();
result.IsSuccess.Should().BeTrue();

⚡️ КАСТОМИЗАЦИЯ ИСТОРИИ МИГРАЦИЙ В ENTITY FRAMEWORK В Entity Framework можно гибко настроить таблицу истории миграций и это п
⚡️ КАСТОМИЗАЦИЯ ИСТОРИИ МИГРАЦИЙ В ENTITY FRAMEWORK В Entity Framework можно гибко настроить таблицу истории миграций и это полезно в реальных проектах. По умолчанию EF создаёт таблицу __EFMigrationsHistory в стандартной схеме (dbo). Но часто требуется: - вынести её в отдельную схему - изменить имя таблицы - разделить миграции между модулями - привести структуру БД к корпоративным стандартам Это можно сделать прямо при настройке DbContext через метод MigrationsHistoryTable.


services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(
        connectionString,
        sqlOptions =>
        {
            sqlOptions.MigrationsHistoryTable(
                tableName: "MigrationHistory",
                schema: "infrastructure"
            );
        }));


// Теперь EF будет хранить историю миграций в:
// infrastructure.MigrationHistory