Забираем полезный репозиторий для C#/.NET-разработчиков — готовый шаблон Clean Architecture для ASP.NET Core.
Внутри можно подсмотреть правильную структуру проекта, разделение слоёв, DDD, Dependency Injection, тестирование и другие практики для разработки поддерживаемых .NET-приложений.
Хорошая база как для изучения архитектуры на живом коде, так и для старта собственного проекта.
GitHub: ardalis/CleanArchitecture
👉 @KodBlog
Внутри можно подсмотреть правильную структуру проекта, разделение слоёв, DDD, Dependency Injection, тестирование и другие практики для разработки поддерживаемых .NET-приложений.
Хорошая база как для изучения архитектуры на живом коде, так и для старта собственного проекта.
GitHub: ardalis/CleanArchitecture
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🍾2
Почему Redis может оказаться не таким эффективным, как кажется — большой практический разбор кэширования в .NET.
Автор начинает с реального
Полезный материал для C#/.NET-разработчиков, которые хотят не просто «прикрутить Redis», а понимать, где и какой уровень кэширования действительно стоит использовать.
https://habr.com/ru/articles/1068772/
👉 @KodBlog
Автор начинает с реального
OutOfMemory в проде, а затем на нагрузочных тестах сравнивает Redis/Valkey, ASP.NET Output Cache и MemoryCache. Разбирает влияние кэша на аллокации и GC, cache stampede, инвалидацию, ETag, conditional GET и клиентское кэширование.Полезный материал для C#/.NET-разработчиков, которые хотят не просто «прикрутить Redis», а понимать, где и какой уровень кэширования действительно стоит использовать.
https://habr.com/ru/articles/1068772/
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 сентября.
Регистрируйтесь, планируйте поездку и до встречи во Владимире!
Офлайн-мероприятий для .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
Многие проекты сталкиваются с проблемами из-за неправильного подхода к тестированию. 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🍾2
.NET tip: перестаньте прятать
Вместо этого используйте TimeProvider. В рабочем коде приложение получает реальное время, а в тестах можно использовать fake clock и самостоятельно перемещать время вперёд.
Небольшая абстракция, которая делает тесты гораздо удобнее.
👉 @KodBlog
DateTime.UtcNow внутри кода.Вместо этого используйте TimeProvider. В рабочем коде приложение получает реальное время, а в тестах можно использовать fake clock и самостоятельно перемещать время вперёд.
Небольшая абстракция, которая делает тесты гораздо удобнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤯1🍾1
Какой самый быстрый способ выполнить SQL bulk insert?
Я протестировал все популярные подходы... Победитель — SqlBulkCopy. Это самый быстрый способ вставить большой объём данных в SQL Server. В PostgreSQL есть команда
Вот ещё 5 решений, которые сравнивались: https://milanjovanovic.tech/blog/fast-sql-bulk-inserts-with-csharp-and-ef-core
👉 @KodBlog
Я протестировал все популярные подходы... Победитель — SqlBulkCopy. Это самый быстрый способ вставить большой объём данных в SQL Server. В PostgreSQL есть команда
COPY, которая работает похожим образом.Вот ещё 5 решений, которые сравнивались: https://milanjovanovic.tech/blog/fast-sql-bulk-inserts-with-csharp-and-ef-core
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🍾1
Лучший урок по C#, который вы получите сегодня:
(чтобы сократить количество багов на 50%)
Не возвращайте
ПЕРЕСТАНЬТЕ:
• Заставлять вызывающий код проверять результат на
• Засорять код лишними условиями
• Рисковать получить runtime exceptions, которые сложно отследить
НАЧНИТЕ:
• Возвращать
• Возвращать
• Возвращать
Так код становится безопаснее, чище и понятнее. А остальные пусть продолжают тонуть в
👉 @KodBlog
(чтобы сократить количество багов на 50%)
Не возвращайте
null-коллекции из своих методов. Возвращайте пустые коллекции.ПЕРЕСТАНЬТЕ:
• Заставлять вызывающий код проверять результат на
null• Засорять код лишними условиями
• Рисковать получить runtime exceptions, которые сложно отследить
НАЧНИТЕ:
• Возвращать
new List<T>()• Возвращать
Enumerable.Empty<T>()• Возвращать
[] — collection expression из C# 12Так код становится безопаснее, чище и понятнее. А остальные пусть продолжают тонуть в
null-проверках.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
Соберите свой первый multi-agent workflow на .NET с помощью Microsoft AutoGen: agent loops, использование tools и выполнение кода.
Гайд Autonomous AI Agents in C# with AutoGen
#AgenticAI #CSharp #DotNet #AutoGen #AI
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3🤔2🍾1
Если хотите стать лучше как software engineer — освойте background jobs.
Вот почему они помогают создавать более масштабируемые системы.
Допустим, нужно вынести часть работы приложения в background, чтобы она выполнялась независимо от основного application flow.
Несколько примеров:
- Напоминать пользователям о продлении подписки
- Отправлять email после завершения продажи
- Обрабатывать сообщения из очереди
- Удалять устаревшие элементы из cache
В .NET background task можно настроить буквально за несколько минут. Самый простой подход — использовать класс
Если требуется более надёжное и функциональное решение, первый выбор — Quartz.
Подробнее читать здесь.
👉 @KodBlog
Вот почему они помогают создавать более масштабируемые системы.
Допустим, нужно вынести часть работы приложения в background, чтобы она выполнялась независимо от основного application flow.
Несколько примеров:
- Напоминать пользователям о продлении подписки
- Отправлять email после завершения продажи
- Обрабатывать сообщения из очереди
- Удалять устаревшие элементы из cache
В .NET background task можно настроить буквально за несколько минут. Самый простой подход — использовать класс
BackgroundService. Начиная с .NET 8, такие background services также можно запускать параллельно.Если требуется более надёжное и функциональное решение, первый выбор — Quartz.
Подробнее читать здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🍾1
Бесплатный курс по C# от Microsoft
Microsoft и freeCodeCamp запустили бесплатный курс по C#, для новичков. В программу курса входят: базовые конструкции языка, работа с методами, циклами, условиями, массивами и отладкой кода.
Обучение построено на практических заданиях и мини-проектах, а после прохождения курса можно бесплатно сдать сертификационный экзамен и получить сертификат🧑🏫
👉 @KodBlog
Microsoft и freeCodeCamp запустили бесплатный курс по C#, для новичков. В программу курса входят: базовые конструкции языка, работа с методами, циклами, условиями, массивами и отладкой кода.
Обучение построено на практических заданиях и мини-проектах, а после прохождения курса можно бесплатно сдать сертификационный экзамен и получить сертификат
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🍾1
Union Types в C#
Используйте их для представления состояний или результатов, например
Но будьте осторожны, если они являются частью entity в EF Core: на практике сейчас удобнее использовать discriminated hierarchy.
Главное — сохранить ясность domain-модели, не усложняя persistence.
#dotnet
👉 @KodBlog
Используйте их для представления состояний или результатов, например
Success | Failure.Но будьте осторожны, если они являются частью entity в EF Core: на практике сейчас удобнее использовать discriminated hierarchy.
Главное — сохранить ясность domain-модели, не усложняя persistence.
#dotnet
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
Это отличный способ контролировать использование вашего приложения.
У такого подхода есть как плюсы, так и минусы, но rate limiting может сделать ваши API более надёжными и безопасными.
Это техника, которая позволяет ограничивать количество запросов к серверу или API.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🍾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
Если вы разрабатываете distributed systems, этот паттерн обязательно стоит знать.
Saga Pattern помогает поддерживать согласованность данных в длительных процессах, которые затрагивают несколько сервисов. В основе Saga лежит координация потока данных и действий между microservices. Такая координация может быть реализована двумя способами:
• Choreography — каждый сервис самостоятельно взаимодействует с другими для достижения общей цели
• Orchestration — центральный компонент координирует действия всех сервисов
Что происходит, если один из шагов Saga завершается ошибкой?
Об этом часто забывают, поскольку большинство разработчиков пишут код в расчёте на happy path. Однако важно заранее продумать обработку ошибок на каждом этапе Saga. Лучший способ обработки будет зависеть от требований бизнеса.
Как реализовать Saga Pattern в .NET: Гайд по реализации Saga Pattern с MassTransit
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 —
Преимущества такого подхода:
• Оптимизация производительности
• Более чистая организация кода
• Выборочное применение middleware
👉 @KodBlog
В динамичном мире web-разработки эффективная обработка входящих HTTP requests имеет ключевое значение для создания надёжных и производительных приложений.
Middleware в .NET играет важную роль в обработке этих requests, выступая связующим звеном между server и application. Один из мощных инструментов ASP.NET Core —
app.UseWhen, который позволяет разработчикам условно применять middleware в зависимости от заданных критериев.Преимущества такого подхода:
• Оптимизация производительности
• Более чистая организация кода
• Выборочное применение middleware
app.UseWhen особенно полезен для приложений со специфическими требованиями к routing или обработке requests. Для простых приложений он может быть избыточен, но в более сложных сценариях способен значительно улучшить производительность и организацию кода.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
Самое простое объяснение: это 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
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🍾1