C# 1001 notes
6.53K subscribers
346 photos
9 videos
2 files
322 links
Регулярные короткие заметки по C# и .NET.

Просто о сложном для каждого.

admin - @haarrp
Download Telegram
⚡️ dotnet/eShop — справочное .NET-приложение (reference application)

📌 Что это такое
- Приложение-пример на .NET, которое реализует веб-сайт электронной коммерции (eCommerce) с архитектурой, основанной на сервисах.
- Использует .NET 9.
- Код лицензирован по MIT.

📌 Как запустить
- Клонировать репозиторий.
- Установить .NET 9 SDK.
- Для Windows: можно использовать Visual Studio (2022 17.10+).
- Можно запустить через Docker Desktop.
- Через терминал:
```bash
dotnet run --project src/eShop.AppHost/eShop.AppHost.csproj

📌 Особенности

Пример данных каталога хранится в catalog.json, описания продуктов и брендов — вымышленные.

Изображения продуктов сгенерированы с помощью DALL·E 3.

Есть версия приложения, подготовленная для деплоя в Azure.

📌 Почему полезно

- Подходит как учебный материал для изучения структуры реального .NET-приложения.
- Демонстрирует современные практики: архитектура, CI/CD, микросервисы.
- Можно использовать как стартовую точку для собственных проектов.

#dotnet #eCommerce #ReferenceApp #MIT #Architecture #SampleProject #Microservices

Репозиторий: https://github.com/dotnet/eShop
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Лучшая фича C# за последние годы? Pattern Matching

Зачем он нужен:
Pattern matching позволяет элегантно проверять объект на определённые свойства:

- Является null или не null
- Является объектом конкретного типа
- Имеет свойство с определённым значением

В связке со switch-выражениями и record-типами это превращает код в лаконичный и выразительный.

📌 Пример:

static string PrintShape(object shape) =>
shape switch
{
null => "Нет объекта",
Circle c => $"Круг с радиусом {c.Radius}",
Rectangle { Width: > 0, Height: > 0 } r => $"Прямоугольник {r.Width}x{r.Height}",
_ => "Неизвестная фигура"
};
⚡️ .NET-приложения должны быть устойчивыми — и сделать их надежнее реально за пару минут.

В .NET 8 и выше есть библиотеки от Microsoft и обновлённый API Polly — популярной библиотеки для повышения надёжности и обработки сбоев.

С Polly можно легко настроить стратегии:
- повтор запросов (Retry)
- резервные сценарии (Fallback)
- ограничение времени (Timeout)
- контроль частоты (Rate-limiting)
- автоматическое отключение при сбоях (Circuit breaker)

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

Подробный разбор тут
Please open Telegram to view this post
VIEW IN TELEGRAM
🌟 Знаете ли вы, что с помощью информационных атрибутов можно получить информацию о вызывающем методе?

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Что мне нравится в **.NET Aspire** 👇

👉 С ним невероятно просто запускать полезные сервисы. Всего в несколько строк кода можно поднять:
- базу данных
- Redis
- LLM
- reverse proxy
- message broker

Можно даже масштабировать сервисы, чтобы проверить сценарии с конкурентной нагрузкой.

Если вы ещё не пробовали построить своё первое Aspire-приложение — у меня есть подробный гайд о том, как я мигрировал свой .NET проект в Aspire.

🟠Читать здесь: https://milanjovanovic.tech/blog/dotnet-aspire-a-game-changer-for-cloud-native-development
Please open Telegram to view this post
VIEW IN TELEGRAM
.NET Channel Publisher — простой способ строить настоящий async messaging

📌 Как это работает:
- Использует System.Threading.Channels для асинхронной публикации событий
- Сообщения пишутся в канал и обрабатываются в фоне, не блокируя поток
- Поддержка CancellationToken для безопасной отмены

🔥 Плюсы:
- Минимум кода — максимум гибкости
- Высокая производительность и низкая задержка
- Удобно для event-driven архитектуры и микросервисов

На скриншоте:
- Пример класса ChannelPublisher для отправки нотификаций
- Трейсинг вызова Order.Service: POST orders показывает прозрачную обработку и асинхронность

#dotnet #csharp #async #messaging
🔥 Открытый урок «C# и ORM: работаем с базой данных».

Взаимодействие с базами данных - классический сценарий работы программы. В рамках ОУ рассмотрим инструменты из категории ORM, которые позволяют используя язык C# работать с БД (на примере PostgreSQL) безопасно и эффективно.

🗓 21 октября в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «C# Developer».

🎯 О чём поговорим:
✔️ для чего нужны БД
✔️ Какие сценарии использования реляционных баз данных на примере PostgreSQL
✔️ Что такое ORM
✔️ Какие библиотеки (ORM) используются при разработке на C# для работы с базами данных
✔️CRUD операции (создать, читать, обновить, удалить запись в БД)

👥 Кому будет полезно:
- Тем, кто понимает, как работает C#, но хочет узнать, как применять его в реальных программах
- Тем, кто писал на других языках программирования, и хочет узнать, как работать с БД на платформе .Net

🔗 Ссылка на регистрацию: https://otus.pw/iONDI/?erid=2W5zFHHzeNc

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
С EF Core можно делать действительно классные вещи — вот пример конфигурации сущности:

- 🔒 Check constraint: Price > 0 — защита данных прямо на уровне БД.
- 🎯 Precision control — задаём точность для столбца Price, чтобы избежать ошибок округления.
- 🧩 Unique index на Name — просто потому что можно (и полезно).

Пример конфигурации:

builder.Property(p => p.Price)
.HasPrecision(10, 2);

builder.HasCheckConstraint("CK_Product_Price_Positive", "Price > 0");

builder.HasIndex(p => p.Name)
.IsUnique();


Следующий шаг — создать EF migration, чтобы применить эти настройки в базе данных.
Если вы хотите разобраться глубже — вот отличный гайд по миграциям в EF Core: гайд