Ты используешь локальные переменные в LINQ?
Слышал про ключевое слово
Ключевое слово
Это похоже на создание переменной внутри цикла. С помощью let можно выносить сложные выражения в отдельные переменные — так запрос становится модульным и легче читается.
Кроме того,
На фото прикрепил простой пример использования.
⏩ Также чекни эти 4 совета по улучшению производительности в Entity Framework: тут
👉 @KodBlog
Слышал про ключевое слово
let? Ключевое слово
let позволяет создавать локальные переменные прямо внутри LINQ-запроса.Это похоже на создание переменной внутри цикла. С помощью let можно выносить сложные выражения в отдельные переменные — так запрос становится модульным и легче читается.
Кроме того,
let может помочь в оптимизации производительности LINQ-запросов, уменьшая количество итераций, необходимых для обработки данных.На фото прикрепил простой пример использования.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🥴3❤1🔥1
Версионирование API в .NET 9
В .NET 9 ты можешь гибко управлять версиями API — хоть в контроллерах, хоть в минималках:
⏩ URL-версионирование —
⏩ Query string —
⏩ Заголовок HTTP —
⏩ Тип медиа —
⚙️ Подключи нужные пакеты:
Поддержка версионирования:
⏩ В контроллерах
⏩ В минимальных API
Старые версии можно объявить устаревшими.
👉 @KodBlog
В .NET 9 ты можешь гибко управлять версиями API — хоть в контроллерах, хоть в минималках:
/api/v1/orders, /api/v2/orders/api/orders?api-version=1 X-Api-Version: 1application/vnd.myapi.v1+json
Asp.Versioning.Http
Asp.Versioning.Mvc
Asp.Versioning.Mvc.ApiExplorer
Поддержка версионирования:
Старые версии можно объявить устаревшими.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥1
Новинка: Incrementalist 1.0 — инструмент инкрементальной сборки для .NET, который использует git diff (через libgit2sharp) и Roslyn для анализа изменений и зависимостей в коде, чтобы значительно сократить время сборки и тестирования в больших .NET-решениях и монорепозиториях.
Хотя его использовали и раньше, но только сейчас инструмент получил полноценный интерфейс командной строки😊
👉 @KodBlog
Хотя его использовали и раньше, но только сейчас инструмент получил полноценный интерфейс командной строки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥3
Ищешь альтернативу MediatR?
Рекомендую обратить внимание на Channels в .NET
С помощью Channels можно легко реализовать простую очередь сообщений в памяти
Channels реализуют паттерн
У канала есть Writer и Reader, через которые ты можешь публиковать и потреблять сообщения.
⏩ Вот как можно с их помощью сделать простой message bus: вот
👉 @KodBlog
Рекомендую обратить внимание на Channels в .NET
С помощью Channels можно легко реализовать простую очередь сообщений в памяти
Channels реализуют паттерн
producer-consumer — продюсеры асинхронно отправляют данные, а консюмеры — асинхронно их читаютУ канала есть Writer и Reader, через которые ты можешь публиковать и потреблять сообщения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3🤔1
Как спроектировать эффективные и безопасные API?
Диаграмма выше показывает типичные подходы к проектированию API на примере корзины покупок
Обратите внимание: проектирование API — это не только определение путей URL. Чаще всего необходимо правильно выбирать имена ресурсов, идентификаторы и шаблоны путей. Также не менее важно продумать заголовки HTTP-запросов и разработать эффективные правила ограничения частоты запросов на уровне API-шлюза.
Какие из API, которые вы проектировали, были самыми интересными?🪑
👉 @KodBlog
Диаграмма выше показывает типичные подходы к проектированию API на примере корзины покупок
Обратите внимание: проектирование API — это не только определение путей URL. Чаще всего необходимо правильно выбирать имена ресурсов, идентификаторы и шаблоны путей. Также не менее важно продумать заголовки HTTP-запросов и разработать эффективные правила ограничения частоты запросов на уровне API-шлюза.
Какие из API, которые вы проектировали, были самыми интересными?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3🌚1
Как использовать
⏩ https://spectreconsole.net
👉 @KodBlog
Spectre.Console в ASP.NET Core для выделения важных разделов в консолиPlease open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2🥴2👀1
20 ключевых концепций проектирования систем, которые должен знать каждый разработчик
👉 @KodBlog
1. Балансировка нагрузки
Распределяет трафик между несколькими серверами для надёжности.
2. Кэширование
Хранит часто используемые данные в памяти для более быстрого доступа.
3. Шардирование базы данных
Разделяет базы данных для обработки роста данных в крупных масштабах.
4. Репликация
Копирует данные на реплики для обеспечения доступности и отказоустойчивости.
5. Теорема CAP
Компромисс между согласованностью, доступностью и устойчивостью к разделению.
6. Консистентное хеширование
Распределяет трафик между несколькими серверами для надёжности.
7. Очереди сообщений
Развязывает сервисы с помощью архитектуры на основе событий (async event-driven).
8. Ограничение частоты запросов (Rate Limiting)
Контролирует частоту запросов для предотвращения перегрузки системы.
9. API-шлюз
Централизованная точка входа для маршрутизации API-запросов.
10. Микросервисы
Разбивает систему на независимые, слабо связанные сервисы.
11. Обнаружение сервисов (Service Discovery)
Находит сервисы динамически в распределённых системах.
12. CDN
Доставляет контент с edge-серверов для повышения скорости.
13. Индексация БД
Ускоряет запросы за счёт индексации важных полей.
14. Партиционирование
Разделяет данные по узлам для масштабируемости и производительности.
15. Согласованность со временем
Гарантирует согласованность со временем в распределённых базах данных.
16. WebSockets
Обеспечивает двустороннюю связь для обновлений в реальном времени.
17. Масштабируемость
Увеличивает мощность за счёт обновления или добавления машин.
18. Отказоустойчивость
Обеспечивает доступность системы при сбоях аппаратного/программного обеспечения.
19. Мониторинг
Отслеживает метрики и логи для оценки состояния системы.
20. Аутентификация и авторизация (AuthN & AuthZ)
Управляет доступом пользователей и проверяет их личность безопасно
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4👏2
Media is too big
VIEW IN TELEGRAM
Нужно развернуть .NET веб-приложение в Azure?
Вот бесплатный курс для начинающих
Он показывает самый простой способ поэтапного развёртывания
В курсе также рассматриваются:
—> Как Azure размещает ваше приложение в облаке
—> Как устранять проблемы при деплое
—> Как подключить веб-приложение к API в облаке
К концу курса у вас будет полнофункциональное .NET-приложение, работающее от начала до конца в облаке.
⏩ Полный курс можно посмотреть бесплатно здесь
👉 @KodBlog | #видео
Вот бесплатный курс для начинающих
Он показывает самый простой способ поэтапного развёртывания
ASP.NET Core веб-приложений и API в облаке Microsoft AzureВ курсе также рассматриваются:
—> Как Azure размещает ваше приложение в облаке
—> Как устранять проблемы при деплое
—> Как подключить веб-приложение к API в облаке
К концу курса у вас будет полнофункциональное .NET-приложение, работающее от начала до конца в облаке.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥1
Обновлённый инструмент GitHub Copilot для .NET скоро выйдет
Сейчас находится в закрытом предварительном просмотре —но можно подать заявку на участие в программе раннего доступа: клик
Может действовать автономно, без необходимости подтверждать каждое действие, так как будет поддерживать режим агента Copilot, который скоро появится в Visual Studio
Не могу дождаться, чтобы попробовать👊
👉 @KodBlog
Сейчас находится в закрытом предварительном просмотре —но можно подать заявку на участие в программе раннего доступа: клик
Может действовать автономно, без необходимости подтверждать каждое действие, так как будет поддерживать режим агента Copilot, который скоро появится в Visual Studio
Не могу дождаться, чтобы попробовать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2🐳1
В C# 14 (в превью) появился новый ключевой элемент —
Он позволяет писать тело аксессора свойства без явного объявления поля для хранения значения.
Компилятор сам подставит вместо
Что думаешь об этом нововведении?🕵️♂️
👉 @KodBlog
fieldОн позволяет писать тело аксессора свойства без явного объявления поля для хранения значения.
Компилятор сам подставит вместо
field автоматически сгенерированное поле.Что думаешь об этом нововведении?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥17🍾5❤1
Что такое векторный поиск?
Лучший метод поиска, о котором вы не знали
Если вы реализуете поиск, у вас есть два основных варианта:
⏩ Поиск по ключевым словам
⏩ Полнотекстовый поиск
И эти подходы хороши.
Я использовал их во многих приложениях. Но они не подходят для произвольных запросов
Например: «идеи для быстрого и полезного завтрака» — такие запросы не работают с keyword-поиском
🧭 Решение — векторный поиск!
Как это работает:
1. Мы подаём текст, изображения или другие данные в LLM (большую языковую модель)
2. Модель превращает каждую единицу данных в список чисел (вектор)
3. Эти числа отражают смысл данных
4. Похожие по смыслу вещи получают похожие векторы
После этого мы можем делать поиск по смыслу, а не по ключевым словам
Это особенно круто, если вы работаете с AI, рекомендациями или чат-ботами.
Хотите узнать больше? Вот —> статья
👉 @KodBlog
Лучший метод поиска, о котором вы не знали
Если вы реализуете поиск, у вас есть два основных варианта:
И эти подходы хороши.
Я использовал их во многих приложениях. Но они не подходят для произвольных запросов
Например: «идеи для быстрого и полезного завтрака» — такие запросы не работают с keyword-поиском
Как это работает:
1. Мы подаём текст, изображения или другие данные в LLM (большую языковую модель)
2. Модель превращает каждую единицу данных в список чисел (вектор)
3. Эти числа отражают смысл данных
4. Похожие по смыслу вещи получают похожие векторы
После этого мы можем делать поиск по смыслу, а не по ключевым словам
Это особенно круто, если вы работаете с AI, рекомендациями или чат-ботами.
Хотите узнать больше? Вот —> статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3⚡1
Новое в C# 14 — extension-блоки
Раньше метод расширения выглядел так:
Теперь можно компактно группировать всё, что "расширяет" тип, в одном extension-блоке. Это удобно и визуально чище:
Да, теперь даже
Использование не поменялось
C# снова сделал шаг вперед👍
👉 @KodBlog
Раньше метод расширения выглядел так:
public static IEnumerable<int> WhereGreaterThan(this IEnumerable<int> source, int threshold)
Теперь можно компактно группировать всё, что "расширяет" тип, в одном extension-блоке. Это удобно и визуально чище:
extension(IEnumerable<int> source)
{
public IEnumerable<int> WhereGreaterThan(int threshold)
=> source.Where(x => x > threshold);
public bool IsEmpty => !source.Any();
}
Да, теперь даже
IsEmpty можно написать как будто он был в IEnumerableИспользование не поменялось
C# снова сделал шаг вперед
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍14🥴4❤2🥰1
Как архитектор программного обеспечения и .NET-разработчик, я постепенно отказался от использования исключений для управления логикой выполнения в своих приложениях
🕵️♂️
👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Пример Central Package Management (CPM)
Когда мы указываем версии NuGet-пакетов в одном центральном файле (
А вы уже используете CPM в своих решениях?☺️
👉 @KodBlog
Когда мы указываем версии NuGet-пакетов в одном центральном файле (
Directory.Packages.props), все проекты в решении автоматически используют эти версии. Это упрощает поддержку и предотвращает расхождение версий между проектами.А вы уже используете CPM в своих решениях?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6
Только что добавил обогащение пользовательского контекста в трассировку запросов в
Теперь отслеживать путь пользователя и разбирать баги стало гораздо проще.
5 выводов из моей реализации:
1. Вытаскивайте
2. Прокидывайте контекст пользователя в теги
3. Ставьте
4. Дополняйте контекст фичами (
5. Следите за утечкой персональных данных (PII) в логах
Хотите улучшить observability своих .NET-приложений?
⏩ Полный разбор — тут
👉 @KodBlog
ASP .NET CoreТеперь отслеживать путь пользователя и разбирать баги стало гораздо проще.
5 выводов из моей реализации:
1. Вытаскивайте
userId из клеймов через middleware2. Прокидывайте контекст пользователя в теги
Activity и в logging scopes3. Ставьте
middleware после аутентификации в пайплайне4. Дополняйте контекст фичами (
feature flags) и информацией о тенанте5. Следите за утечкой персональных данных (PII) в логах
Хотите улучшить observability своих .NET-приложений?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Хочешь освоить C# с нуля и получить сертификат от Microsoft? ™️
freeCodeCamp запустили бесплатный курс Foundational C# with Microsoft
— 35 часов практики
— Основы C#, переменные, циклы, массивы
— Учеба через Microsoft Learn
— Официальный сертификат после финального экзамена
Подойдет новичкам и всем, кто хочет документально подтвердить свои знания.
🔗 Стартовать можно здесь: курс на freeCodeCamp
👉 @KodBlog
freeCodeCamp запустили бесплатный курс Foundational C# with Microsoft
— 35 часов практики
— Основы C#, переменные, циклы, массивы
— Учеба через Microsoft Learn
— Официальный сертификат после финального экзамена
Подойдет новичкам и всем, кто хочет документально подтвердить свои знания.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍7❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5
image_2025-04-28_08-59-10.png
1.1 MB
Топ-10 архитектурных паттернов
Архитектура программного обеспечения — это процесс проектирования структуры и поведения программной системы, включая принятие решений о компонентах, модулях, интерфейсах и организации системы
Паттерны архитектуры программного обеспечения важны, потому что они предлагают многократно проверенные решения для типовых задач проектирования. Они отражают лучшие практики для создания надёжных, масштабируемых, поддерживаемых и расширяемых систем🫡
Существует множество архитектурных паттернов, но основные из них:
👉 @KodBlog
Архитектура программного обеспечения — это процесс проектирования структуры и поведения программной системы, включая принятие решений о компонентах, модулях, интерфейсах и организации системы
Паттерны архитектуры программного обеспечения важны, потому что они предлагают многократно проверенные решения для типовых задач проектирования. Они отражают лучшие практики для создания надёжных, масштабируемых, поддерживаемых и расширяемых систем
Существует множество архитектурных паттернов, но основные из них:
1. Многоуровневая архитектура (Layered Architecture)
> Приложение делится на логические уровни, каждый из которых отвечает за свою часть работы и взаимодействует с соседними уровнями.
2. Архитектура микросервисов (Microservices Architecture)
> Приложение разбивается на небольшие независимые сервисы, которые взаимодействуют через чётко определённые API.
3. Событийно-ориентированная архитектура (Event-Driven Architecture)
> Компоненты или сервисы обмениваются событиями, которые инициируют действия или реакции в системе.
4.Архитектура, основанная на пространствах (Space-Based Architecture, SBA)
> Структура системы строится вокруг "пространств" — независимых и автономных единиц.
5. Архитектура микрокерна (Microkernel Architecture)
> Ядро системы минималистичное, а дополнительные функции реализуются отдельными модулями вне ядра.
6. Пиринговая архитектура (Peer-to-Peer Architectural Pattern)
> Децентрализованная модель, в которой узлы сети могут быть одновременно и клиентами, и серверами.
7. Облачная нативная архитектура (Cloud-Native Software Architecture)
> Приложения разрабатываются и разворачиваются с учётом особенностей облачных платформ для масштабируемости, надёжности и гибкости.
8. CQRS (Command Query Responsibility Segregation)
> Разделение моделей для команд (изменений данных) и запросов (чтения данных) для упрощения масштабирования и оптимизации.
9. Шестиугольная архитектура (Hexagonal Architecture)
> Деление приложения на внутренний слой (бизнес-логика) и внешний слой (взаимодействие с внешним миром).
10. Чистая архитектура (Clean Architecture)
> Принцип строгого разделения ответственностей и слабой связанности компонентов для облегчения поддержки и развития приложения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥2
Ранее 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