This media is not supported in your browser
VIEW IN TELEGRAM
Браузерная игрушка обучает C#
RPG, где прогресс зависит не от кликов, а от того, насколько хорошо ты пишешь код на C#
Что внутри:
Отличный способ учиться C# в формате приключения. Игра затягивает, а навыки прокачиваются сами собой
https://rpg.dijix.com.ua/
👉 @KodBlog
RPG, где прогресс зависит не от кликов, а от того, насколько хорошо ты пишешь код на C#
Что внутри:
🔄 Вы становитесь героем фантастического мира рыцари, монстры, нелегкие испытания🔄 Но вместо обычных “нажми кнопку, чтобы победить” вам нужно писать код на C#, чтобы решать задачи и прокачивать персонажа🔄 Стратегия, логика и программирование объединены развиваете не только персонажа, но и себя как разработчика
Отличный способ учиться C# в формате приключения. Игра затягивает, а навыки прокачиваются сами собой
https://rpg.dijix.com.ua/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2🥴2🍾1
Вот как можно реализовать tenant-based query filter с помощью EF Core.
Понадобится сервис, который будет предоставлять
Побочный эффект такого подхода:
👉 @KodBlog
Понадобится сервис, который будет предоставлять
TenantId для текущего tenant. Получить это значение можно из request header или JWT (cookie) claim.Побочный эффект такого подхода:
DbContext можно будет использовать только в рамках HTTP request.Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4❤2🍾1
Как лучше всего получать значения конфигурации в .NET?
Для этого можно использовать Options pattern, и вот почему о нём стоит знать.
Конфигурация приложения может храниться в environment variables, JSON-файлах, user secrets или других configuration providers. Отдельные значения можно получать через интерфейс
Вместо этого можно использовать Options pattern:
• Создать класс, представляющий настройки
• Привязать свойства класса к настройкам приложения (JSON)
• Использовать Options pattern в коде через
Также в класс настроек можно добавить Data Annotations для простой валидации.
👉 @KodBlog
Для этого можно использовать Options pattern, и вот почему о нём стоит знать.
Конфигурация приложения может храниться в environment variables, JSON-файлах, user secrets или других configuration providers. Отдельные значения можно получать через интерфейс
IConfiguration, но такой подход подвержен ошибкам и довольно неудобен, поэтому использовать его не рекомендуется.Вместо этого можно использовать Options pattern:
• Создать класс, представляющий настройки
• Привязать свойства класса к настройкам приложения (JSON)
• Использовать Options pattern в коде через
IOptionsТакже в класс настроек можно добавить Data Annotations для простой валидации.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🤯2🍾1
Братья мои во Христе, которые работают с .NET 6+, ради всего святого — используйте эту фичу по полной. Она реально помогает сократить количество кода в классе.
Иногда попадаются такие классы, что хочется спросить: ну серьёзно, это же ничего не стоит использовать.
👉 @KodBlog
Иногда попадаются такие классы, что хочется спросить: ну серьёзно, это же ничего не стоит использовать.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴14❤7👍1🍾1
Забираем полезный репозиторий для 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