C# Portal | Программирование
13.1K subscribers
1.35K photos
132 videos
31 files
1.03K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика

Сотрудничество, реклама: @devmangx

Работаем с @Spiral_Yuri

РКН: https://clck.ru/3FocB6
Download Telegram
Забираем полезный репозиторий для C#/.NET-разработчиков — готовый шаблон Clean Architecture для ASP.NET Core.

Внутри можно подсмотреть правильную структуру проекта, разделение слоёв, DDD, Dependency Injection, тестирование и другие практики для разработки поддерживаемых .NET-приложений.

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

GitHub: ardalis/CleanArchitecture

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🍾2
Почему Redis может оказаться не таким эффективным, как кажется — большой практический разбор кэширования в .NET.

Автор начинает с реального OutOfMemory в проде, а затем на нагрузочных тестах сравнивает Redis/Valkey, ASP.NET Output Cache и MemoryCache. Разбирает влияние кэша на аллокации и GC, cache stampede, инвалидацию, ETag, conditional GET и клиентское кэширование.

Полезный материал для C#/.NET-разработчиков, которые хотят не просто «прикрутить Redis», а понимать, где и какой уровень кэширования действительно стоит использовать.

https://habr.com/ru/articles/1068772/

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🍾1
.NET и Владимир: отличный повод совместить митап и выходные в городе с историей

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

В программе доклады от разработчиков Altenar и Рови Тех (часть Т-Банка):
— Async/await — асинхронность, которую можно читать.
— Как не терять данные при асинхронной интеграции программных систем.
— EF Core + PostgreSQL: за рамками CRUD.


Кстати, ещё на митапе запланированы активности для программистов: адаптации известных игр ("Сапер", "Крестики-нолики", "Гонки"), где для победы понадобится понимание математики и вероятностей.

Участие бесплатное, а ещё можно сэкономить на проезде — организаторы разыграют несколько билетов на "Ласточку" среди участников.

Для участия в розыгрыше:
1. Зарегистрируйтесь на митап.
2. Напишите «Хочу на .NET-митап на Ласточке» на почту aleksei.korneev@altenar.com с почты, указанной при регистрации.

Итоги розыгрыша подведём 14 сентября.


Регистрируйтесь, планируйте поездку и до встречи во Владимире!
😁3🍾1
Как я подхожу к тестированию приложений

Многие проекты сталкиваются с проблемами из-за неправильного подхода к тестированию. Codebase растёт, внесение изменений становится всё более рискованным, а разработчики теряют уверенность в своих deployments.

Особенно это актуально для проектов на Clean Architecture, где важно убедиться, что use cases работают корректно.

Мой подход к Unit Testing:

• NSubstitute для mock зависимостей
• Тестирование всех happy paths
• Тестирование всех failure paths
• Проверка обработки exceptions

Unit Testing помогает убедиться, что логика работает правильно. Пошаговый разбор этого подхода к тестированию:
https://milanjovanovic.tech/blog/unit-testing-clean-architecture-use-cases

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🍾2
.NET tip: перестаньте прятать DateTime.UtcNow внутри кода.

Вместо этого используйте TimeProvider. В рабочем коде приложение получает реальное время, а в тестах можно использовать fake clock и самостоятельно перемещать время вперёд.

Небольшая абстракция, которая делает тесты гораздо удобнее.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤯1🍾1
.NET Tip.Select() vs .SelectMany()

Практический пример:

Клиент запросил список всех технологий, которыми владеют ваши сотрудники.

#Dotnet

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾5❤2
Какой самый быстрый способ выполнить SQL bulk insert?

Я протестировал все популярные подходы... Победитель — SqlBulkCopy. Это самый быстрый способ вставить большой объём данных в SQL Server. В PostgreSQL есть команда COPY, которая работает похожим образом.

Вот ещё 5 решений, которые сравнивались: https://milanjovanovic.tech/blog/fast-sql-bulk-inserts-with-csharp-and-ef-core

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🍾1
Лучший урок по C#, который вы получите сегодня:
(чтобы сократить количество багов на 50%)

Не возвращайте null-коллекции из своих методов. Возвращайте пустые коллекции.

ПЕРЕСТАНЬТЕ:
• Заставлять вызывающий код проверять результат на null
• Засорять код лишними условиями
• Рисковать получить runtime exceptions, которые сложно отследить

НАЧНИТЕ:
• Возвращать new List<T>()
• Возвращать Enumerable.Empty<T>()
• Возвращать [] — collection expression из C# 12

Так код становится безопаснее, чище и понятнее. А остальные пусть продолжают тонуть в null-проверках.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎4❤2🍾2❤‍🔥1
Создавайте автономных AI-агентов на C#!

Соберите свой первый multi-agent workflow на .NET с помощью Microsoft AutoGen: agent loops, использование tools и выполнение кода.

Гайд Autonomous AI Agents in C# with AutoGen

#AgenticAI #CSharp #DotNet #AutoGen #AI

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3🤔2🍾1
Слышали о temporal coupling?

Вот фрагмент кода с распространённым anti-pattern: temporal coupling между сохранением данных и публикацией событий.

Проблема:
❤3🍾2❤‍🔥1
И кто же? 🙂

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🤣7🕊3💯1🍾1
Если хотите стать лучше как software engineer — освойте background jobs.

Вот почему они помогают создавать более масштабируемые системы.
Допустим, нужно вынести часть работы приложения в background, чтобы она выполнялась независимо от основного application flow.

Несколько примеров:

- Напоминать пользователям о продлении подписки
- Отправлять email после завершения продажи
- Обрабатывать сообщения из очереди
- Удалять устаревшие элементы из cache

В .NET background task можно настроить буквально за несколько минут. Самый простой подход — использовать класс BackgroundService. Начиная с .NET 8, такие background services также можно запускать параллельно.

Если требуется более надёжное и функциональное решение, первый выбор — Quartz.

Подробнее читать здесь.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🍾1
Бесплатный курс по C# от Microsoft

Microsoft и freeCodeCamp запустили бесплатный курс по C#, для новичков. В программу курса входят: базовые конструкции языка, работа с методами, циклами, условиями, массивами и отладкой кода.

Обучение построено на практических заданиях и мини-проектах, а после прохождения курса можно бесплатно сдать сертификационный экзамен и получить сертификат 🧑‍🏫

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🍾1
Union Types в C#

Используйте их для представления состояний или результатов, например Success | Failure.

Но будьте осторожны, если они являются частью entity в EF Core: на практике сейчас удобнее использовать discriminated hierarchy.

Главное — сохранить ясность domain-модели, не усложняя persistence.

#dotnet

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🍾2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🍾1
.NET позволяет добавить API rate limiting буквально одной строкой кода.

Это отличный способ контролировать использование вашего приложения.

У такого подхода есть как плюсы, так и минусы, но rate limiting может сделать ваши API более надёжными и безопасными.

Это техника, которая позволяет ограничивать количество запросов к серверу или API.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🍾1
Cокровищница для новичков «Coddy Journeys»

Бесплатная онлайн платформа где вы осваиваете программирование, проходя интерактивные маршруты и решаете задачи прямо в браузере.

Учёба превращается в игру, шаг за шагом к своим первым успехам в IT ❤️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🍾1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🍾1
Saga Pattern в .NET

Если вы разрабатываете distributed systems, этот паттерн обязательно стоит знать.

Saga Pattern помогает поддерживать согласованность данных в длительных процессах, которые затрагивают несколько сервисов. В основе Saga лежит координация потока данных и действий между microservices. Такая координация может быть реализована двумя способами:

• Choreography — каждый сервис самостоятельно взаимодействует с другими для достижения общей цели
• Orchestration — центральный компонент координирует действия всех сервисов

Что происходит, если один из шагов Saga завершается ошибкой?

Об этом часто забывают, поскольку большинство разработчиков пишут код в расчёте на happy path. Однако важно заранее продумать обработку ошибок на каждом этапе Saga. Лучший способ обработки будет зависеть от требований бизнеса.

Как реализовать Saga Pattern в .NET: Гайд по реализации Saga Pattern с MassTransit

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🍾1
Как запускать conditional middleware в .NET?

В динамичном мире web-разработки эффективная обработка входящих HTTP requests имеет ключевое значение для создания надёжных и производительных приложений.

Middleware в .NET играет важную роль в обработке этих requests, выступая связующим звеном между server и application. Один из мощных инструментов ASP.NET Core — app.UseWhen, который позволяет разработчикам условно применять middleware в зависимости от заданных критериев.

Преимущества такого подхода:

• Оптимизация производительности
• Более чистая организация кода
• Выборочное применение middleware

app.UseWhen особенно полезен для приложений со специфическими требованиями к routing или обработке requests. Для простых приложений он может быть избыточен, но в более сложных сценариях способен значительно улучшить производительность и организацию кода.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾3❤1👍1
Что такое API Gateway?

Самое простое объяснение: это reverse proxy с дополнительными возможностями. API Gateway — это точка входа для ваших backend services и API. Он выступает промежуточным слоем, принимает client requests и направляет их в нужные сервисы.

Основные возможности API Gateway:

• Request routing и composition
• Authentication и Authorization
• Load balancing
• Rate limiting
• Monitoring
• Caching

Проще всего воспринимать его как reverse proxy с дополнительными обязанностями.

Как реализовать API Gateway в .NET: Гайд по API Gateway с YARP

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🍾1