Популярні бібліотеки

План модуля 10.libraries — Популярні бібліотеки ASP.NET

План модуля 10.libraries — Популярні бібліотеки ASP.NET

!NOTE Цей план містить перелік «мастхев» бібліотек для сучасної ASP.NET розробки. Кожна тема — це окрема стаття, що пояснює проблему, рішення та практичне впровадження.


01. Валідація: FluentValidation

Проблема: DataAnnotations розкидані по полях, складно тестувати, неможливо додати складну логіку (наприклад, перевірку унікальності в БД). Зміст:

  • Створення валідатора AbstractValidator<T>
  • Ланцюжки правил: .NotEmpty().EmailAddress()
  • Кастомна логіка через .Must()
  • Вкладена валідація та валідація колекцій
  • Автоматична інтеграція з ASP.NET Pipeline

02. Маппінг: Mapster

Проблема: Ручний маппінг (переписування полів з DTO в Entity) займає багато часу та призводить до помилок. AutoMapper занадто складний та повільний. Зміст:

  • Чому Mapster? (Performance & Simplicity)
  • Базовий маппінг через .Adapt<T>()
  • Конфігурація правил маппінгу
  • Code Generation: створення мапперів під час білду
  • Маппінг складних вкладених структур

03. Обробка помилок: ErrorOr / Result Pattern

Проблема: Використання Exceptions для бізнес-помилок — це дорого і робить код важким для читання. Зміст:

  • Концепція Result Pattern
  • Бібліотека ErrorOr: типи успіху та помилок
  • Match/Switch логіка в ендпоінтах
  • Інтеграція з Minimal API (Problem Details)

04. Логування: Serilog

Проблема: Стандартне логування — це просто текст. Складно фільтрувати по ID користувача або Transaction ID. Зміст:

  • Structured Logging (JSON логування)
  • Enrichers: автоматичне додавання контексту (MachineName, ThreadId)
  • Sinks: куди відправляти логи (File, Seq, Elasticsearch)
  • Налаштування через appsettings.json

05. Команди та Запити: MediatR

Проблема: Величезні контролери/сервіси з десятками залежностей. Зміст:

  • Патерн Mediator та CQRS (Command Query Responsibility Segregation)
  • Розділення логіки на Request та Handler
  • Pipeline Behaviors: логування та валідація «крізь» усі запити
  • Notifications: Event-driven підхід всередині додатку

06. Відмовостійкість: Polly

Проблема: Зовнішні API падають. Потрібно вміти «перечекати» або «спробувати ще раз». Зміст:

  • Resilience patterns: Retry (повтор) та Circuit Breaker (запобіжник)
  • Timeout та Fallback (запасний план)
  • Інтеграція з HttpClient
  • Резильєнтність у .NET 8+ через Resilience Pipelines

07. Моніторинг здоров’я: Health Checks

Проблема: Як дізнатися, що база даних впала або Redis недоступний без перевірки логів? Зміст:

  • Створення /health ендпоінта
  • Перевірка зовнішніх залежностей (DB, Redis, External API)
  • UI для Health Checks: візуальний моніторинг стану системи

08. Керування фічами: Feature Management

Проблема: Як вимкнути функцію в продакшені без редиплою? Зміст:

  • Feature Flags (Toggle)
  • Умовне відображення UI та логіки
  • Поступовий rollout (випуск фічі на 10% користувачів)
  • Feature filters (ввімкнення фічі тільки для адмінів)

09. Робота з Email: FluentEmail

Проблема: SmtpClient застарів, а API сервісів (SendGrid, Mailgun) різні. Зміст:

  • Fluent-інтерфейс для створення листів
  • Razor-шаблони для HTML-листів
  • Інтеграція з різними провайдерами (SMTP, SendGrid)

10. Генерація PDF: QuestPDF

Проблема: Створення PDF через HTML-to-PDF — це боляче, повільно і нестабільно. Зміст:

  • Layout-based підхід (як у Flutter або CSS Grid)
  • Компоненти: Таблиці, Зображення, Текст
  • Висока продуктивність та стабільність верстки

11. Тестові дані: Bogus

Проблема: Складно створювати реалістичні дані для тестів вручну. Зміст:

  • Генерація імен, адрес, телефонів, описів товарів
  • Створення складних графів об'єктів для Seed-data
  • Локалізація даних (українські імена)

12. Корисні дрібниці: Humanizer & Guard Clauses

Проблема: Код завалений перевірками if (obj == null) throw... та некрасивим відображенням дат/чисел. Зміст:

  • Humanizer: перетворення "2023-01-01" у "2 місяці тому" або "100" у "сто"
  • Guard Clauses: чистий код через Guard.Against.Null(obj)

Майбутній модуль 11. Observability (OpenTelemetry)

Окремий великий модуль (Планується):

  • Distributed Tracing: відстеження запиту крізь кілька мікросервісів
  • Metrics: збір кастомних бізнес-метрик (кількість замовлень, швидкість запитів)
  • Jaeger & Prometheus: візуалізація трас та графіків
  • Instrumentation: як автоматично збирати дані з EF Core, Redis, HttpClient