Ранее Microsoft обнаружила ошибку в расчётах: в месяцы с менее чем 31 днем (например, февраль, апрель) пользователи платили меньше, чем должны были.
> С 1 июня 2025 года начнут правильно рассчитывать оплату для месяцев с менее чем 31 днём
> Это может привести к незначительному увеличению вашего счёта за хранение данных
> Важно: Вам не будут доначислять недоплаченные суммы за прошлые периоды до 1 июня 2025
> Действий от вас не требуется, но рекомендуется следить за счётами, чтобы убедиться в правильности начислений
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11👍4❤1
Если вы работаете с .NET и ищете современную библиотеку для работы с изображениями, обратите внимание на ImageSharp
ImageSharp — это полностью управляемая, кроссплатформенная библиотека для 2D-графики. Она позволяет:
> Загружать и сохранять изображения в форматах JPEG, PNG, GIF, BMP, TIFF, WebP и других
> Масштабировать, обрезать, вращать изображения, применять фильтры и спецэффекты
> Читать и изменять метаданные (EXIF, IPTC, XMP)
> Работать с разными цветовыми пространствами (RGB, CMYK, Grayscale и т.д.)
> Эффективно обрабатывать большие изображения благодаря оптимизации работы с памятью
Установить можно через NuGet:
👉 @KodBlog
ImageSharp — это полностью управляемая, кроссплатформенная библиотека для 2D-графики. Она позволяет:
> Загружать и сохранять изображения в форматах JPEG, PNG, GIF, BMP, TIFF, WebP и других
> Масштабировать, обрезать, вращать изображения, применять фильтры и спецэффекты
> Читать и изменять метаданные (EXIF, IPTC, XMP)
> Работать с разными цветовыми пространствами (RGB, CMYK, Grayscale и т.д.)
> Эффективно обрабатывать большие изображения благодаря оптимизации работы с памятью
Установить можно через NuGet:
dotnet add package SixLabors.ImageSharp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥7❤4
Идеальный приём для повышения продуктивности с EF Core:
Используй EF Core Power Tools
EF Core Power Tools — это расширение для Visual Studio, которое помогает в проектировании базы данных
Возможности:
— визуализируй свой DbContext в один клик
— генерируй SQL-скрипты создания таблиц на основе своих C# классов
— получай C# классы из баз данных Azure SQL, SQL Server, Postgres и MySQL
— просматривай статус миграций, добавляй новые и синхронизируй базу данных с моделью
EF Core Power Tools полезен при создании нового проекта с нуля
Но и при подключении к существующему проекту —
↳ чтобы быстро разобраться в структуре базы данных и связях.
Лайк если уже пробовал EF Core Power Tools👍
P.S. На изображении выше показано, как выглядит сгенерированная диаграмма
👉 @KodBlog
Используй EF Core Power Tools
EF Core Power Tools — это расширение для Visual Studio, которое помогает в проектировании базы данных
Возможности:
— визуализируй свой DbContext в один клик
— генерируй SQL-скрипты создания таблиц на основе своих C# классов
— получай C# классы из баз данных Azure SQL, SQL Server, Postgres и MySQL
— просматривай статус миграций, добавляй новые и синхронизируй базу данных с моделью
EF Core Power Tools полезен при создании нового проекта с нуля
Но и при подключении к существующему проекту —
↳ чтобы быстро разобраться в структуре базы данных и связях.
Лайк если уже пробовал EF Core Power Tools
P.S. На изображении выше показано, как выглядит сгенерированная диаграмма
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3😁2
Как человек, который годами рефакторил запутанные кодовые базы, скажу:
Начни использовать Guard Clauses (защитные условия).
→ Защитные условия сразу защищают твой код от некорректных состояний.
→ Они убирают глубокую вложенность, скрывающую бизнес-логику
→ Делают методы читаемыми и линейными — сверху вниз
Обрабатывай ошибки, пограничные случаи и некорректный ввод в самом начале метода
👍 — база
🔥 — спасибо
👉 @KodBlog
Начни использовать Guard Clauses (защитные условия).
→ Защитные условия сразу защищают твой код от некорректных состояний.
→ Они убирают глубокую вложенность, скрывающую бизнес-логику
→ Делают методы читаемыми и линейными — сверху вниз
Обрабатывай ошибки, пограничные случаи и некорректный ввод в самом начале метода
👍 — база
🔥 — спасибо
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71🔥19🤯3❤2
Как передать Tenant ID в мультиарендных (multitenant) приложениях?
У вас есть как минимум 3 варианта:
⏩ Заголовок запроса (Request header)
⏩ Cookie
⏩ JWT
В приведённом на фото примере кода Tenant ID извлекается из заголовка HTTP-запроса
Также есть и другие способы получить Tenant ID: передача через строку запроса (query string) или извлечение из claim в удостоверении пользователя
Использование claim-ов, скорее всего, будет самым безопасным способом
Вы даже можете получать Tenant ID из базы данных (но это повлияет на производительность)
После этого можно использовать EF Core для реализации фильтрации по Tenant.
—> Вот как это делается: читать
👉 @KodBlog
У вас есть как минимум 3 варианта:
В приведённом на фото примере кода Tenant ID извлекается из заголовка HTTP-запроса
Также есть и другие способы получить Tenant ID: передача через строку запроса (query string) или извлечение из claim в удостоверении пользователя
Использование claim-ов, скорее всего, будет самым безопасным способом
Вы даже можете получать Tenant ID из базы данных (но это повлияет на производительность)
После этого можно использовать EF Core для реализации фильтрации по Tenant.
—> Вот как это делается: читать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Switch-выражения. Вы либо любите их, либо ненавидите
Но одно можно сказать точно:
Они используются в каждом проекте
И никуда не исчезнут.
Один простой способ упростить конструкцию
Это способ сразу присвоить результат switch-конструкции переменной.
Смотрите пример на видео выше
А что предпочитаете вы: switch-оператор или switch-выражение?☕️
👉 @KodBlog
Но одно можно сказать точно:
Они используются в каждом проекте
И никуда не исчезнут.
Один простой способ упростить конструкцию
switch — использовать switch-выражение.Это способ сразу присвоить результат switch-конструкции переменной.
Смотрите пример на видео выше
А что предпочитаете вы: switch-оператор или switch-выражение?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤5😁2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥1
Простой, хоть и не самый распространённый способ упростить условия
—> используйте сопоставление с образцом по свойствам
Сопоставление с образцом по свойствам в C# — это мощный инструмент, который помогает упростить код и сделать его более понятным
👍 — база
🔥 — всё верно
👉 @KodBlog
if—> используйте сопоставление с образцом по свойствам
Сопоставление с образцом по свойствам в C# — это мощный инструмент, который помогает упростить код и сделать его более понятным
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥23🤯5❤3
Хочешь стать крутым разработчиком?
Разберись с конечными автоматами.
Вот определение для тех, кто любит точность:
А если по-простому:
> Есть текущее состояние
> Происходит какое-то событие или действие
> Переход в новое состояние
Мы задаём все возможные состояния, переходы между ними и что эти переходы запускает
А дальше можно реализовать это как Saga — способ управления бизнес-логикой, которая тянется во времени
MassTransit предлагает одну из самых удобных реализаций
⏩ Вот как можно начать: read
👉 @KodBlog
Разберись с конечными автоматами.
Вот определение для тех, кто любит точность:
"Конечный автомат — это математическая модель, которая используется для проектирования алгоритмов. Он получает входные данные и в зависимости от них переходит в другое состояние."
А если по-простому:
> Есть текущее состояние
> Происходит какое-то событие или действие
> Переход в новое состояние
Мы задаём все возможные состояния, переходы между ними и что эти переходы запускает
А дальше можно реализовать это как Saga — способ управления бизнес-логикой, которая тянется во времени
MassTransit предлагает одну из самых удобных реализаций
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2😁2🤔1
Хочешь разрабатывать приложения в Azure? Запомни эти 3 типа облаков
> IAAS – Ты управляешь приложениями и данными, провайдер отвечает за «железо» и сеть.
> PAAS – Провайдер берёт на себя инфраструктуру и ОС, ты просто пишешь код.
> SAAS – Готовые приложения; минимум гибкости, максимум удобства
👉 @KodBlog
> IAAS – Ты управляешь приложениями и данными, провайдер отвечает за «железо» и сеть.
> PAAS – Провайдер берёт на себя инфраструктуру и ОС, ты просто пишешь код.
> SAAS – Готовые приложения; минимум гибкости, максимум удобства
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
This media is not supported in your browser
VIEW IN TELEGRAM
Один простой хак для продуктивности умных C#-разработчиков
Создавай сразу несколько классов в Visual Studio
Как это сделать?
В окне «Добавить новый элемент» просто введи несколько названий классов, разделяя их запятыми
P.S. Смотри видео выше, как это работает
👉 @KodBlog
Создавай сразу несколько классов в Visual Studio
Как это сделать?
В окне «Добавить новый элемент» просто введи несколько названий классов, разделяя их запятыми
P.S. Смотри видео выше, как это работает
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47❤3
Многие неправильно понимают Clean Architecture
Я вижу одну и ту же ошибку снова и снова
Разработчики узнают про Clean Architecture, вдохновляются её идеями —
и сразу начинают лепить структуру проекта по знаменитой диаграмме
Но фишка вот в чём > Clean Architecture — это не про папки. Это про зависимости.
Саймон Браун даже написал «пропущенную главу» к книге дяди Боба, где как раз поднимает эту тему.
Но по какой-то причине главный смысл все равно теряется
✅ Можно использовать Clean Architecture и без слоёв
✅ Главное — правильно направлять зависимости
Вот два способа, как реально лучше структурировать приложение на Clean Architecture: читать
👉 @KodBlog
Я вижу одну и ту же ошибку снова и снова
Разработчики узнают про Clean Architecture, вдохновляются её идеями —
и сразу начинают лепить структуру проекта по знаменитой диаграмме
Но фишка вот в чём > Clean Architecture — это не про папки. Это про зависимости.
Саймон Браун даже написал «пропущенную главу» к книге дяди Боба, где как раз поднимает эту тему.
Но по какой-то причине главный смысл все равно теряется
Вот два способа, как реально лучше структурировать приложение на Clean Architecture: читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤2
Пример SQL-запроса, который генерирует Entity Framework для вставки в SQL Server
Обрати внимание на использование оператора
Такой подход выбран из соображений производительности👍
👉 @KodBlog
Обрати внимание на использование оператора
MERGE, который изначально предназначался для объединения двух таблицТакой подход выбран из соображений производительности
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥1
5 фич EF Core, которые тебе точно пригодятся
Разделение запросов (Query Splitting)
— Делит JOIN-запросы на несколько отдельных
— Может ускорить выполнение, особенно при сложных связях
Массовое обновление (Bulk Updates)
— Использует ExecuteUpdate для изменения множества сущностей
— Обновление идёт сразу в базу, мимо Unit of Work
Сырые SQL-запросы (Raw SQL)
— Подгружай сущности напрямую через SQL
— Полный контроль над запросом, можно юзать фичи SQL
Массовое удаление (Bulk Deletes)
— Через ExecuteDelete удаляешь пачку записей
— Тоже обходит Unit of Work и идёт сразу в базу
Игнорирование фильтров запросов (Ignore Query Filters)
— Фильтры позволяют скрывать строки по умолчанию
— Иногда нужно отключить, например, для админки
🧠 Бонус: ещё 5 фич EF Core тут
👉 @KodBlog
Разделение запросов (Query Splitting)
— Делит JOIN-запросы на несколько отдельных
— Может ускорить выполнение, особенно при сложных связях
Массовое обновление (Bulk Updates)
— Использует ExecuteUpdate для изменения множества сущностей
— Обновление идёт сразу в базу, мимо Unit of Work
Сырые SQL-запросы (Raw SQL)
— Подгружай сущности напрямую через SQL
— Полный контроль над запросом, можно юзать фичи SQL
Массовое удаление (Bulk Deletes)
— Через ExecuteDelete удаляешь пачку записей
— Тоже обходит Unit of Work и идёт сразу в базу
Игнорирование фильтров запросов (Ignore Query Filters)
— Фильтры позволяют скрывать строки по умолчанию
— Иногда нужно отключить, например, для админки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤1
Фишка в Visual Studio для C# разработчиков — быстрое превращение JSON в классы, без онлайн-сервисов:
Просто скопируй JSON, зайди в Edit → Paste Special → Paste JSON as Classes — и Visual Studio сама сгенерит нужные классы.
Удобно и мгновенно❤️
👉 @KodBlog
Просто скопируй JSON, зайди в Edit → Paste Special → Paste JSON as Classes — и Visual Studio сама сгенерит нужные классы.
Удобно и мгновенно
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥48👍11❤2
Rider 2025.1 получил несколько улучшений для работы с системой контроля версий
Теперь в представлении diff сразу отображаются детали коммита, а при обновлении удалённых репозиториев Git изменения подтягиваются автоматически
🔄 Держите свои репы в актуальном состоянии без лишних усилий
Дополнительные сведения о контроле версий можно найти — здесь
👉 @KodBlog
Теперь в представлении diff сразу отображаются детали коммита, а при обновлении удалённых репозиториев Git изменения подтягиваются автоматически
Дополнительные сведения о контроле версий можно найти — здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3🥴1
В превью C# 14 теперь можно передавать непараметризированный универсальный тип в
Например,
Раньше можно было передавать только закрытые универсальные типы, такие как
💖
👉 @KodBlog
nameofНапример,
nameof(List<>) вернёт ListРаньше можно было передавать только закрытые универсальные типы, такие как
List<int>, чтобы получить ListPlease open Telegram to view this post
VIEW IN TELEGRAM
👍17😐7
Вот как завалить юнит-тестирование в C#
Пиши раздутые методы тестов. Если у теста такая структура:
→ Arrange 1
→ Act 1
→ Assert 1
→ Act 2
→ Assert 2
...
— он уже слишком большой. Такой тест проверяет сразу несколько сценариев, и если он упадёт — ты потратишь часы, разбираясь, почему.
Вместо этого пиши тесты по простой структуре:
→ Arrange
→ Act
→ Assert
Так ты сразу понимаешь, какой сценарий покрыт
Ты не Шекспир. Хватит писать тесты с множеством "действий".😇
👉 @KodBlog
Пиши раздутые методы тестов. Если у теста такая структура:
→ Arrange 1
→ Act 1
→ Assert 1
→ Act 2
→ Assert 2
...
— он уже слишком большой. Такой тест проверяет сразу несколько сценариев, и если он упадёт — ты потратишь часы, разбираясь, почему.
Вместо этого пиши тесты по простой структуре:
→ Arrange
→ Act
→ Assert
Так ты сразу понимаешь, какой сценарий покрыт
Ты не Шекспир. Хватит писать тесты с множеством "действий".
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🤨4❤1
В C# 14 (preview) допускается использование оператора условного доступа
Ранее нужно было проверять, не равен ли
В C# 14 метод
👉 @KodBlog
?. слева от присваивания.Ранее нужно было проверять, не равен ли
customer значению null перед присваиванием заказаВ C# 14 метод
GetCurrentOrder не вызывается, если customer равен nullPlease open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4🤔1