C# Portal | Программирование – Telegram
C# Portal | Программирование
14.9K subscribers
972 photos
118 videos
24 files
813 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
Схема последовательности действий Outbox Pattern

Этот паттерн обеспечивает надёжную доставку событий из приложения в очередь сообщений без потери данных

1. Пользователь отправляет заказ.

2. Приложение сохраняет:

—> Заказ в таблицу Orders
—> Соответствующее событие в таблицу Outbox

Всё это происходит в рамках одной транзакции — то есть либо оба действия выполняются, либо ни одно.

3. Отдельный процессор Outbox затем:

—> Извлекает необработанные события
—> Публикует их в очередь сообщений (например, Kafka, RabbitMQ)
—> Отмечает их как обработанные в БД

Как реализовать его с нуля? —> читать

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4
Вы слышали о Coravel?

Coravel — это .NET-библиотека без необходимости конфигурации, ориентированная на разработчиков, вдохновлённая Laravel (PHP-фреймворком).

Она создана для того, чтобы сделать ваше приложение мощнее — за счёт фоновых задач и автоматизации.

Это как бустер продуктивности для .NET-бэкенда.

Возможности без базы данных, брокеров сообщений и внешних сервисов:

—> Планирование задач (как Cron)
—> Очереди фоновых задач (в памяти)
—> Классы фоновых задач (Invocables)
—> Рассылка событий (Pub/Sub внутри процесса)
—> Отправка писем
—> Простое кэширование

Не подходит для критически важных задач, которым нужна устойчивость, и для распределённых систем, требующих координации.

Ты уже пробовал? 🏴‍☠️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
Ты используешь локальные переменные в LINQ?

Слышал про ключевое слово let?

Ключевое слово let позволяет создавать локальные переменные прямо внутри LINQ-запроса.

Это похоже на создание переменной внутри цикла. С помощью let можно выносить сложные выражения в отдельные переменные — так запрос становится модульным и легче читается.

Кроме того, let может помочь в оптимизации производительности LINQ-запросов, уменьшая количество итераций, необходимых для обработки данных.

На фото прикрепил простой пример использования.

Также чекни эти 4 совета по улучшению производительности в Entity Framework: тут

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🥴31🔥1
Версионирование API в .NET 9

В .NET 9 ты можешь гибко управлять версиями API — хоть в контроллерах, хоть в минималках:

URL-версионирование — /api/v1/orders, /api/v2/orders

Query string — /api/orders?api-version=1

Заголовок HTTP — X-Api-Version: 1

Тип медиа — application/vnd.myapi.v1+json

⚙️ Подключи нужные пакеты:
Asp.Versioning.Http  
Asp.Versioning.Mvc
Asp.Versioning.Mvc.ApiExplorer


Поддержка версионирования:

В контроллерах
В минимальных API

Старые версии можно объявить устаревшими.

👉 @KodBlog
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
👍73🔥3
Ищешь альтернативу MediatR?

Рекомендую обратить внимание на Channels в .NET

С помощью Channels можно легко реализовать простую очередь сообщений в памяти

Channels реализуют паттерн producer-consumer — продюсеры асинхронно отправляют данные, а консюмеры — асинхронно их читают

У канала есть Writer и Reader, через которые ты можешь публиковать и потреблять сообщения.

Вот как можно с их помощью сделать простой message bus: вот

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3🤔1
Как спроектировать эффективные и безопасные API?

Диаграмма выше показывает типичные подходы к проектированию API на примере корзины покупок

Обратите внимание: проектирование API — это не только определение путей URL. Чаще всего необходимо правильно выбирать имена ресурсов, идентификаторы и шаблоны путей. Также не менее важно продумать заголовки HTTP-запросов и разработать эффективные правила ограничения частоты запросов на уровне API-шлюза.

Какие из API, которые вы проектировали, были самыми интересными? 🪑

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🌚1
Как использовать Spectre.Console в ASP.NET Core для выделения важных разделов в консоли

https://spectreconsole.net

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2🥴2👀1
20 ключевых концепций проектирования систем, которые должен знать каждый разработчик

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)
Управляет доступом пользователей и проверяет их личность безопасно


👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4👏2
Media is too big
VIEW IN TELEGRAM
Нужно развернуть .NET веб-приложение в Azure?

Вот бесплатный курс для начинающих

Он показывает самый простой способ поэтапного развёртывания ASP.NET Core веб-приложений и API в облаке Microsoft Azure

В курсе также рассматриваются:

—> Как Azure размещает ваше приложение в облаке

—> Как устранять проблемы при деплое

—> Как подключить веб-приложение к API в облаке

К концу курса у вас будет полнофункциональное .NET-приложение, работающее от начала до конца в облаке.

Полный курс можно посмотреть бесплатно здесь

👉 @KodBlog | #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥1
Обновлённый инструмент GitHub Copilot для .NET скоро выйдет

Сейчас находится в закрытом предварительном просмотре —но можно подать заявку на участие в программе раннего доступа: клик

Может действовать автономно, без необходимости подтверждать каждое действие, так как будет поддерживать режим агента Copilot, который скоро появится в Visual Studio

Не могу дождаться, чтобы попробовать 👊

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥2🐳1
В C# 14 (в превью) появился новый ключевой элемент — field

Он позволяет писать тело аксессора свойства без явного объявления поля для хранения значения.

Компилятор сам подставит вместо field автоматически сгенерированное поле.

Что думаешь об этом нововведении? 🕵️‍♂️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥17🍾51
Что такое векторный поиск?

Лучший метод поиска, о котором вы не знали

Если вы реализуете поиск, у вас есть два основных варианта:

Поиск по ключевым словам
Полнотекстовый поиск

И эти подходы хороши.

Я использовал их во многих приложениях. Но они не подходят для произвольных запросов

Например: «идеи для быстрого и полезного завтрака» — такие запросы не работают с keyword-поиском

🧭 Решение — векторный поиск!

Как это работает:

1. Мы подаём текст, изображения или другие данные в LLM (большую языковую модель)

2. Модель превращает каждую единицу данных в список чисел (вектор)

3. Эти числа отражают смысл данных

4. Похожие по смыслу вещи получают похожие векторы

После этого мы можем делать поиск по смыслу, а не по ключевым словам

Это особенно круто, если вы работаете с AI, рекомендациями или чат-ботами.

Хотите узнать больше? Вот —> статья

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥31
Новое в C# 14 — extension-блоки

Раньше метод расширения выглядел так:

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# снова сделал шаг вперед 👍

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍14🥴42🥰1
Как архитектор программного обеспечения и .NET-разработчик, я постепенно отказался от использования исключений для управления логикой выполнения в своих приложениях

🕵️‍♂️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
«Why C#?» — свежий выпуск от доктора Милана Милановича, Microsoft MVP и эксперта в области программной инженерии

Статья

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
15
Пример Central Package Management (CPM)

Когда мы указываем версии NuGet-пакетов в одном центральном файле (Directory.Packages.props), все проекты в решении автоматически используют эти версии. Это упрощает поддержку и предотвращает расхождение версий между проектами.

А вы уже используете CPM в своих решениях? ☺️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6
Только что добавил обогащение пользовательского контекста в трассировку запросов в ASP .NET Core

Теперь отслеживать путь пользователя и разбирать баги стало гораздо проще.

5 выводов из моей реализации:

1. Вытаскивайте userId из клеймов через middleware

2. Прокидывайте контекст пользователя в теги Activity и в logging scopes

3. Ставьте middleware после аутентификации в пайплайне

4. Дополняйте контекст фичами (feature flags) и информацией о тенанте

5. Следите за утечкой персональных данных (PII) в логах

Хотите улучшить observability своих .NET-приложений?

Полный разбор — тут

👉 @KodBlog
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
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍72
Паттерн проектирования №5: "Null Object"

Статья

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95
image_2025-04-28_08-59-10.png
1.1 MB
Топ-10 архитектурных паттернов

Архитектура программного обеспечения — это процесс проектирования структуры и поведения программной системы, включая принятие решений о компонентах, модулях, интерфейсах и организации системы

Паттерны архитектуры программного обеспечения важны, потому что они предлагают многократно проверенные решения для типовых задач проектирования. Они отражают лучшие практики для создания надёжных, масштабируемых, поддерживаемых и расширяемых систем 🫡

Существует множество архитектурных паттернов, но основные из них:

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)
> Принцип строгого разделения ответственностей и слабой связанности компонентов для облегчения поддержки и развития приложения


👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2