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

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
7 архитектур, которые стоит знать каждому разработчику

> Монолит
Всё в одном проекте. Легко развернуть и начать разработку, но с ростом системы поддержка становится сложной. Подходит для небольших или быстрых MVP.

> MVC
Классика веб-фреймворков. Модель, представление и контроллер. Работает отлично, если роли чётко разделены (спойлер: многие контроллеры в итоге становятся объектами-богами)

> Master-Slave (сейчас чаще говорят Leader-Follower)
Популярен в БД: один командует — остальные копируют. Увеличивает отказоустойчивость, но если синхронизация сломается — беда.

> Многослойная архитектура
Знаменитый “lasagna code”: слой представления, логики, доступа к данным, база. Хорошо структурирует, но если перегнуть — становится медленно и громоздко

> Микросервисы
Каждая функция живёт отдельно. Масштабируются отлично, но усложняется тестирование, логирование и деплой. Подход не для всех проектов.

> SOA (сервис-ориентированная архитектура)
Более формальный родственник микросервисов. Часто встречается в больших компаниях и старых системах. ESB (Enterprise Service Bus) сначала кажется полезным. пока не становится главным узким местом.

> Событийно-ориентированная архитектура
Идеальна для приложений в реальном времени. Всё основано на событиях. Очень мощная, но если что-то пойдёт не так.. найти баг — непросто


👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥105
16 ресурсов, которые я планирую использовать, чтобы стать в 10 раз лучше в архитектуре программного обеспечения в этом году

Изучи эти репозитории:

1. Эволюционная архитектура на примерах — GitHub
2. Модульный монолит с DDD — GitHub
3. Стартер-кит на .NET 9 с мультиарендой — GitHub
4. Микросервисное eCommerce-приложение на .NET — GitHub
5. Архитектура через вертикальные срезы (Vertical Slice) — GitHub
6. Шаблон чистой архитектуры для .NET — GitHub
7. Пример гексагональной архитектуры — GitHub

Почитай эти книги:

8. Software Architecture for Developers
9. Head First Software Architecture
10. Fundamentals of Software Architecture: An Engineering Approach
11. Software Architecture: The Hard Parts
12. System Design Interview – Insider's Guide
13. System Design Interview – Volume 2
14. Designing Data-Intensive Applications

Прокачайся на практике:


15. Архитектурные каты от Нила Форда — nealford.com/katas
16. Каталог архитектурных кат — GitHub

Закинь в закладки — пригодится 🆗

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72😁1
Добавили метод UseKestrel() в WebApplicationFactory

Это появится в ASP.NET 10 Preview 4 и даст простой способ включить использование сервера Kestrel в WebApplicationFactory ❤️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64
Архитектура Web API

Статья

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Метод-расширение для TagWith в Entity Framework

TagWith() очень полезен для добавления отладочной информации в логи запросов, но, конечно, мы также можем обернуть его и добавить дополнительную информацию через простой extension method, как в примере выше ❤️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
ORM — не проблема. Проблема — как разработчики ими пользуются

Как часто ты видишь, что во всём винят ORM?

Если ты не понимаешь SQL (или любую другую базу данных) — это уже твоя ответственность

Но если ты разбираешься в базовых принципах работы с БД, ты сможешь выжать из ORM максимум

Вот простой пример с EF Core:

— обновление списка уведомлений по одному
— обновление всех уведомлений одной операцией

Что будет быстрее?

Конечно тот вариант, где меньше обращений к базе.

Именно тут блестяще работает EF Bulk Update — ты можешь писать оптимальные UPDATE и DELETE запросы.

Вместо множества SQL-запросов — один.

Но даже у такого подхода есть подводные камни, о которых стоит знать:

> читать

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍142🔥2
Что такое Queue<T>?

Queue<T> — это коллекция в C# с принципом FIFO (первым пришёл — первым ушёл).

То есть первый добавленный элемент будет извлечён первым.

Когда использовать?

> Планирование задач
> Очереди на печать
> Обработка сообщений
> Поиск в ширину (BFS) в графах

Пример прикрепил, с вас лайк ❤️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥5😁31
.NET 10 Preview 4 — больше производительности и удобства

Вышла четвёртая превью-версия .NET 10

В ней — новые возможности языка, улучшения рантайма и прокачанная AOT-компиляция.

Также улучшили поддержку cloud-native сценариев и диагностику — определённо стоит попробовать 😡

> Подробнее: https://devblogs.microsoft.com/dotnet/dotnet-10-preview-4/

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
Если ты до сих пор считаешь, что EF Core медленный в 2025 году — ты застрял в прошлом

Одна из его новых фич — поддержка bulk-удалений

Теперь ты можешь удалить любое количество записей за один запрос к базе.

Представим, что e-commerce платформа хочет удалить все корзины, которые не обновлялись больше года.

С ExecuteDelete это делается эффективно: выполняется один SQL-запрос DELETE, который сразу удаляет все старые корзины.

Но помни: bulk-операции обходят EF Change Tracker.

EF Core предлагает много мощных фич для написания чистого и производительного кода.

> Вот 5, которые ты обязан знать: readme

🎧🎧

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍96🔥2😁1
Совет по Microsoft Visual Studio

Условная компиляция — отличный способ включать или исключать функциональность в зависимости от сценария деплоя.

Обычно используют #if DEBUG, но что если условие не связано с режимом отладки или релиза?

В свойствах проекта, на вкладке Build, можно задать свои собственные символы условной компиляции.

В этом примере используется пользовательский символ, чтобы определить — наследоваться от абстрактного класса или нет.

Важно иметь чёткие инструкции, в каких случаях применять такие символы, как в этом примере

Поддержи пост лайком если полезно ❤️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115
ReSharper теперь и в VS Code

Легендарный инструмент для C# разработчиков добрался до лёгкого редактора.

До этого ReSharper работал только в Visual Studio, теперь — прямо в твоем VS Code.

> Умные подсказки и автодополнение
> Продвинутый анализ кода
> Быстрые рефакторинги
> Навигация как в Rider

Редактор поменялся — ReSharper остался 💪

> Подробнее: https://jb.gg/rs-in-vscode-tw

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍137🤯2
Новый API для поддержки динамически генерируемых схем OpenAPI в документации, появившийся в ASP.NET 10 Preview 4

🐸🐸

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
Совет по LINQ:

Вызывай ToList() после фильтрации, а не до.

Почему?

> В первом случае всё загружается в память до фильтрации
> Во втором — фильтрация происходит на источнике, что лучше для БД или больших коллекций
> Особенно важно при работе с EF Core или API, использующих IQueryable

🎉🎉

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥5😁5🤯1
вопрос в том, быть или не быть

отсылка к знаменитой сцене с Гамлетом

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
😁256👍52🤔2
ASP dotnet: кастомный файл инструкций для GitHub Copilot

Создание файла copilot-instructions.md позволяет задать дополнительные инструкции для Copilot, чтобы его ответы были адаптированы под конкретный репозиторий.

Выше — фрагмент текущего файла инструкций для репозитория dotnet/aspnetcore, который был слит менее часа назад.

Эта функция сейчас находится в превью и поддерживается в Copilot Chat для Visual Studio, VS Code и на сайте GitHub. Также поддерживается агентом Copilot для написания кода.

Что думаете? 💪

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
This media is not supported in your browser
VIEW IN TELEGRAM
Часто при создании моделей я сначала пишу их в одном файле, а уже потом с помощью ReSharper быстро раскидываю каждую модель в отдельный файл — буквально в пару кликов мышкой.

Такой подход лично для меня удобнее:

> не нужно сразу прыгать между десятками файлов
> всё видно и правится в одном месте
> а уже потом ReSharper сам всё красиво разносит по файлам

— Гайд: Как ReSharper разносит классы по файлам

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍6
Следует ли перестать использовать случайные UUID в .NET?

Традиционные UUID (Guid.NewGuid()) являются случайными — это хорошо для уникальности, но плохо с точки зрения производительности базы данных.

Они вызывают:

> Дорогую переработку индексов
> Плохую производительность при вставке
> Высокую фрагментацию

Поэтому многие разработчики перешли на ULID — 128-битные, сортируемые и по-прежнему уникальные.

Они сохраняют временной порядок, что делает их более дружелюбными к индексам.

Но теперь появилось новое:

Guid.CreateVersion7() в .NET 9

UUID версии 7 упорядочены по времени и совместимы с ULID, без необходимости в сторонних пакетах.

Вы получаете преимущества ULID, но с нативной поддержкой в .NET.

Перейдёте ли вы с ULID на UUID V7? 🤔

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥123👍3🥴2
Хочешь поднять свой TCP / UDP / WebSocket сервер без ASP.NET?

SuperSocket — фреймворк для .NET с мощной архитектурой

—> TCP, UDP, WebSocket из коробки
—> Свои протоколы через pipeline-фильтры
—> Middleware, сессии, команды, DI, логи
—> Кроссплатформенный, high-perf, MIT

💖

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥1
Кэширование решает проблемы кэширования.

А дальше остаются проблемы, которые кэш не решает.

Я использую паттерн Cache-Aside (он же ленивая загрузка) для ускорения API.

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

> Если данные есть в кэше → вернуть их
> Если нет → взять из базы данных и положить в кэш

Это происходит, когда:

> Данные ещё не кэшированы
> Кэш истёк или был очищен

Простой способ повысить производительность при чтении.

Вот короткий гайд, как применить это в своём приложении: тут

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🍌2😁1🤔1
99% разработчиков ошибаются в обработке исключений

А вот что делает оставшийся 1%:

Они используют глобальный обработчик исключений.

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

Внутри обработчика можно залогировать исключение и вернуть ProblemDetails клиенту API.

Можно также зарегистрировать несколько реализаций IExceptionHandler — они будут вызываться в порядке регистрации.

Предсказать все исключения невозможно.

Но можно перехватить их все в одном месте.❤️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113👏3😐2😁1
В ASP.NET 10 появится поддержка Passkey 🥳

Passkey — это новый способ входа в систему без пароля, основанный на стандартах FIDO2/WebAuthn.

Вместо ввода пароля, пользователь подтверждает вход с помощью:

> Face ID или Touch ID (на телефоне или ноутбуке)
> PIN-кода
> внешнего ключа безопасности (например, YubiKey)

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🎉32🤔2