C# / ASP.NET Core
Convenzioni, pattern e riferimenti tecnici per lo sviluppo con C# e ASP.NET Core.
Contenuto
- Struttura della solution — organizzazione dei progetti, naming, Program.cs minimal
- Switch expression e pattern matching — switch expression, pattern matching, when guard
- Rate limiting —
Microsoft.AspNetCore.RateLimiting, policy, sliding window - Feature flag —
Microsoft.FeatureManagement, flag condizionali, targeting - Logging —
ILogger<T>, Serilog, sink, log strutturati - Osservabilità — OpenTelemetry, trace, metriche, health checks
- Configurazione tipizzata —
IOptions<T>,IOptionsMonitor<T>, validazione - Code native .NET —
Queue<T>,ConcurrentQueue<T>,Channel<T> - Librerie per code e job — Hangfire, Quartz.NET
- Middleware custom — pipeline,
RequestDelegate, gestione errori globale - Action filter —
IActionFilter,IAsyncActionFilter - Authorization filter —
IAuthorizationFilter, API key, tenant - Exception filter —
IExceptionFilter,IAsyncExceptionFilter - Problem Details (RFC 9457) — errori strutturati,
ProblemDetails,ValidationProblemDetails - Async / Await — throughput nelle Web API,
CancellationToken, anti-pattern - Dependency Injection — lifetimes, captive dependency, keyed services
- HttpClient / IHttpClientFactory — typed client, DelegatingHandler, socket exhaustion
- Validazione — DataAnnotations, FluentValidation, ValidationProblemDetails
- Background services —
BackgroundService, worker pattern, graceful shutdown - Caching —
IMemoryCache,IDistributedCache, output caching - Resilienza — retry, circuit breaker, timeout con
Microsoft.Extensions.Http.Resilience - Records e immutabilità —
record,withexpression, DTO e value object
Entity Framework
- Code First — Setup e migration — DbContext, registrazione, Fluent API, migration CLI
- IQueryable vs List — esecuzione differita, N+1, AsNoTracking
- LINQ con Entity Framework — proiezioni, paginazione, Include, SQL grezzo
Test unitari
- A cosa servono — logica pura, monitoraggio librerie di terze parti, verifica di comportamenti puntuali
Test di integrazione
- Pattern: template e scope — classe base NUnit, clone da template, scope DI per test
- Scrivere un test —
Get<T>(),SeedAsync, FluentAssertions, parallelismo - Testcontainers — PostgreSQL in Docker, nessuna dipendenza locale