Архитектор : «В .NET слишком любят всё усложнять.»
Он же через минуту : «А вот 10 ПОТРЯСАЮЩИХ паттернов, которые мы можем взять из референсной архитектуры eShop от Microsoft!😍 »
Давайте тогда возьмём сайт на WiX и превратим его в магистерскую диссертацию по распределённым системам
А вы тоже замечали такие противоречия среди разработчиков?
👉 @KodBlog
Он же через минуту : «А вот 10 ПОТРЯСАЮЩИХ паттернов, которые мы можем взять из референсной архитектуры eShop от Microsoft!
А вы тоже замечали такие противоречия среди разработчиков?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3
200+ задач по структурам данных и алгоритмам
⏩ Массивы – https://bit.ly/3vM1JP5
⏩ Строки – https://bit.ly/3vM1JP5
⏩ Двоичное дерево – https://bit.ly/3JIsn1i
⏩ Связный список – https://bit.ly/3zFatrn
⏩ Динамическое программирование – https://bit.ly/3vLwjs5
⏩ Рекурсия – https://bit.ly/3JDhUnv
👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2
Нужно получить ID вошедшего пользователя в Web API ? 🪑
(Предполагается, что ID пользователя был добавлен как claim при генерации токена)
—> Определи интерфейс
—> Реализуй его, чтобы считывать ID из claims
—> Зарегистрируй зависимости
—> Внедряй
👉 @KodBlog
(Предполагается, что ID пользователя был добавлен как claim при генерации токена)
—> Определи интерфейс
IUser—> Реализуй его, чтобы считывать ID из claims
—> Зарегистрируй зависимости
—> Внедряй
IUser и получай доступ к ID где угодноPlease open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2😈1
Если вы ещё не включили
Эта опция позволяет сериализатору учитывать обязательные параметры конструктора при десериализации.
Если какой-то required-параметр отсутствует в JSON —
Больше никаких тихих багов из-за значений по умолчанию
💪 💪 💪
👉 @KodBlog
RespectRequiredConstructorParameters в System.Text.Json 9 — самое время это сделатьЭта опция позволяет сериализатору учитывать обязательные параметры конструктора при десериализации.
Если какой-то required-параметр отсутствует в JSON —
JsonException тут как тутБольше никаких тихих багов из-за значений по умолчанию
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4
IAsyncActionFilter — недооценён, но очень полезный фильтрВ
ASP.NET Core фильтры позволяют запускать логику до и после выполнения запроса в пайплайне.Зачем их использовать?
—> Повторно используемая логика
—> Чистые, читаемые контроллеры
Отлично подходит для:
—> Проверки прав доступа
—> Подтверждения email
—> Применения бизнес-правил
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥5❤2😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥2
Трудно отлаживать запросы в EF Core?
Используй
Очень удобно для:
—> Понимания проблем с запросами
—> Копирования и запуска SQL напрямую
Не используй в проде!👊
👉 @KodBlog
Используй
.EnableSensitiveDataLogging() — и увидишь в логах реальный SQL + значения параметровОчень удобно для:
—> Понимания проблем с запросами
—> Копирования и запуска SQL напрямую
Не используй в проде!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍6❤4😐2
Схема последовательности действий Outbox Pattern
Этот паттерн обеспечивает надёжную доставку событий из приложения в очередь сообщений без потери данных
1. Пользователь отправляет заказ.
2. Приложение сохраняет:
—> Заказ в таблицу Orders
—> Соответствующее событие в таблицу Outbox
Всё это происходит в рамках одной транзакции — то есть либо оба действия выполняются, либо ни одно.
3. Отдельный процессор Outbox затем:
—> Извлекает необработанные события
—> Публикует их в очередь сообщений (например, Kafka, RabbitMQ)
—> Отмечает их как обработанные в БД
⏩ Как реализовать его с нуля? —> читать
👉 @KodBlog
Этот паттерн обеспечивает надёжную доставку событий из приложения в очередь сообщений без потери данных
1. Пользователь отправляет заказ.
2. Приложение сохраняет:
—> Заказ в таблицу Orders
—> Соответствующее событие в таблицу Outbox
Всё это происходит в рамках одной транзакции — то есть либо оба действия выполняются, либо ни одно.
3. Отдельный процессор Outbox затем:
—> Извлекает необработанные события
—> Публикует их в очередь сообщений (например, Kafka, RabbitMQ)
—> Отмечает их как обработанные в БД
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4
Вы слышали о Coravel?
Coravel — это .NET-библиотека без необходимости конфигурации, ориентированная на разработчиков, вдохновлённая Laravel (PHP-фреймворком).
Она создана для того, чтобы сделать ваше приложение мощнее — за счёт фоновых задач и автоматизации.
Это как бустер продуктивности для .NET-бэкенда.
Возможности без базы данных, брокеров сообщений и внешних сервисов:
—> Планирование задач (как Cron)
—> Очереди фоновых задач (в памяти)
—> Классы фоновых задач (Invocables)
—> Рассылка событий (Pub/Sub внутри процесса)
—> Отправка писем
—> Простое кэширование
Не подходит для критически важных задач, которым нужна устойчивость, и для распределённых систем, требующих координации.
Ты уже пробовал?🏴☠️
👉 @KodBlog
Coravel — это .NET-библиотека без необходимости конфигурации, ориентированная на разработчиков, вдохновлённая Laravel (PHP-фреймворком).
Она создана для того, чтобы сделать ваше приложение мощнее — за счёт фоновых задач и автоматизации.
Это как бустер продуктивности для .NET-бэкенда.
Возможности без базы данных, брокеров сообщений и внешних сервисов:
—> Планирование задач (как Cron)
—> Очереди фоновых задач (в памяти)
—> Классы фоновых задач (Invocables)
—> Рассылка событий (Pub/Sub внутри процесса)
—> Отправка писем
—> Простое кэширование
Не подходит для критически важных задач, которым нужна устойчивость, и для распределённых систем, требующих координации.
Ты уже пробовал?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3
Ты используешь локальные переменные в 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