Passa al contenuto principale

Glossario

AsyncValidatorFn

Tipo Angular per un validatore asincrono su un FormControl. Riceve un AbstractControl e restituisce un Observable<ValidationErrors | null> o una Promise. Si passa al controllo tramite asyncValidators nell'opzione del costruttore. Vedi tecnologie/angular/pattern-consigliati/forms.

Async / Await

Modello di programmazione asincrona in C# basato su Task<T> e le keyword async/await. Permette di liberare il thread durante operazioni I/O-bound (database, HTTP, file system), aumentando il throughput delle Web API senza aumentare il numero di thread. Vedi tecnologie/csharp/linguaggio/15-async.

Adapter pattern

Pattern strutturale che concilia un'interfaccia esistente (es. una libreria esterna) con quella attesa dal consumatore. In una solution C# l'adapter vive nei progetti di integrazione e isola le librerie dal Core, traducendone tipi ed eccezioni nel vocabolario del dominio. Vedi pattern-di-sviluppo/adapter · tecnologie/csharp/pattern/adapter.

ACID

Proprietà che garantiscono l'affidabilità delle transazioni database: Atomicità, Consistenza, Isolamento, Durabilità. Entity Framework eredita queste garanzie tramite SaveChanges(). Vedi regole/entity-framework.

Analisi funzionale

Documento che descrive cosa il sistema deve fare dal punto di vista del business. È il punto di partenza dell'analisi tecnica. Prodotta tipicamente dall'analista funzionale o dal product owner.

Analisi tecnica

Processo che traduce l'analisi funzionale in una soluzione implementabile: modello dati, contratti, flussi, requisiti non funzionali, piano. Vedi processi/analisi-tecnica.

Audit log

Registro persistente e immutabile delle operazioni eseguite su un sistema, con tutti i dettagli necessari per ricostruire cosa è successo: chi, quando, su quale risorsa, con quale risultato. Nel contesto HTTP: metodo, path, body di request e response, status code, utente, latenza. Vedi tecnologie/csharp/esempi/http-audit-log.

Builder pattern

Pattern creazionale che costruisce passo per passo oggetti complessi, restituendo istanze valide solo al termine tramite Build(). In C# si introduce solo quando object initializer, record con with o parametri opzionali non bastano. Vedi pattern-di-sviluppo/builder · tecnologie/csharp/pattern/builder.

Background service

Componente che gira in background per tutta la vita dell'applicazione, in parallelo con la gestione delle richieste HTTP. Si implementa estendendo BackgroundService e registrandolo con AddHostedService. Vedi tecnologie/csharp/concorrenza/19-background-services.

Backpressure

Meccanismo con cui un consumatore segnala al produttore di rallentare perché non riesce a elaborare i messaggi abbastanza velocemente. In .NET si realizza con Channel<T> limitato (BoundedChannelFullMode.Wait). Vedi tecnologie/csharp/concorrenza/08-code-native.

BRIN

Block Range Index. Tipo di indice PostgreSQL che registra il valore minimo e massimo per blocchi contigui di righe. Molto compatto, efficace solo quando i dati sono già fisicamente ordinati in modo approssimato (serie temporali append-only). Vedi tecnologie/database-relazionali/postgres.

Breaking change

Modifica che rompe la compatibilità con quanto già in uso: rinomina di colonne o campi API, rimozione di entità, variazione di comportamento atteso. Richiede comunicazione immediata ai team dipendenti e un bump MAJOR. Vedi regole/versionamento.

Caching

Tecnica per memorizzare temporaneamente il risultato di operazioni costose (query DB, chiamate HTTP) e riutilizzarlo nelle richieste successive. In ASP.NET Core: IMemoryCache per cache in-process, IDistributedCache per cache condivisa tra istanze (Redis), output caching per risposte HTTP complete. Vedi tecnologie/csharp/integrazione/20-caching.

CancellationToken

Meccanismo standard di .NET per segnalare la cancellazione cooperativa di un'operazione asincrona. Il CancellationTokenSource è il produttore (chi annulla), il CancellationToken è il segnale in sola lettura passato ai consumatori. CreateLinkedTokenSource permette di combinare più motivi di cancellazione in un unico token. Vedi tecnologie/csharp/concorrenza/23-cancellation-token.

Captive dependency

Bug di configurazione DI in cui un servizio con lifetime più lungo (es. singleton) cattura una dipendenza con lifetime più breve (es. scoped). La dipendenza viene tenuta viva oltre il suo ciclo di vita previsto. Vedi tecnologie/csharp/16-dependency-injection.

Circuit breaker

Pattern di resilienza che interrompe temporaneamente le chiamate a un servizio esterno dopo un numero sufficiente di errori consecutivi, evitando di sovraccaricare un sistema già in difficoltà. Il circuito torna operativo dopo un timeout. Vedi tecnologie/csharp/integrazione/21-resilienza.

Chain of Responsibility

Pattern comportamentale che fa attraversare una richiesta a una sequenza di handler indipendenti, ciascuno libero di gestirla, trasformarla o passarla oltre. In ASP.NET Core si manifesta in tre forme: middleware HTTP, filter MVC e pipeline behavior di MediatR. Vedi pattern-di-sviluppo/chain-of-responsibility · tecnologie/csharp/pattern/chain-of-responsibility.

Caso d'uso

Scenario concreto che descrive come un attore interagisce con il sistema per raggiungere un obiettivo. Nel codice, ogni caso d'uso è una classe che implementa IUseCase. Deve esistere uno scenario realistico prima di sviluppare qualsiasi funzionalità.

Configurazione prompt (AI)

Configurazione che lega una funzionalità AI al suo system prompt, allo user prompt e ai parametri di inferenza, una per caso d'uso. Si modifica in place: lo storico di cosa è stato inviato all'AI vive in un log a parte, quindi il modello tiene solo lo stato corrente, senza versionare. La scelta di provider e modello vive sul caso d'uso, per differenza rispetto a un default di sistema. Vedi tecnologie/csharp/esempi/db-prompt-ai.

Clustered index

Indice che determina l'ordinamento fisico dei dati su disco. Ce ne può essere uno solo per tabella e va pianificato sul caso d'uso di lettura più comune, non lasciato di default sulla chiave primaria surrogata. Non va dichiarato UNIQUE: il clustered index non si cambia senza ricostruire la tabella, mentre l'unicità è un requisito applicativo mutevole che va tenuto in indici non clustered dedicati, modificabili a basso costo. In SQL Server è esplicito; in SQLite è il rowid (o la PK di una tabella WITHOUT ROWID); in PostgreSQL non esiste in forma persistente (la heap non è ordinata). Vedi tecnologie/database-relazionali/best-practice/indici.

Code First

Approccio Entity Framework in cui il codice C# è la fonte di verità del modello dati. Il database viene generato e aggiornato a partire dalle entity class e dalle migration. L'opposto (Database First) non si usa. Vedi regole/entity-framework.

Commit assistito dall'IA

Skill che raggruppa le modifiche pendenti del working tree nel minor numero di commit Conventional Commits possibile, senza mescolare intenti con peso semver diverso (in particolare feat e fix, o feat e docs). Dove un file contiene modifiche di intenti diversi, le separa per hunk. Vedi ia/skills/commit-ia.

Command pattern

Pattern comportamentale che reifica un'azione in un oggetto immutabile, separando chi la richiede da chi la esegue. È la base concettuale di IUseCase e dei command di MediatR. Abilita logging uniforme, validazione, coda di lavoro, audit e retry. Vedi pattern-di-sviluppo/command · tecnologie/csharp/pattern/command.

Conventional Commits

Convenzione per i messaggi di commit: <type>(<scope>): <descrizione>. Tipi comuni: feat, fix, docs, refactor, test, chore. Vedi tecnologie/git.

Contratto

Accordo formale tra componenti su come comunicano: schema request/response, errori, autenticazione, versionamento. Una volta pubblicato, cambiare un contratto è un breaking change.

Core

Progetto C# che contiene la logica di dominio: domain service, validator, use case e DI extension organizzati per dominio (Screaming Architecture). Le entità vivono in Db, i DTO ed enum in Models, le integrazioni nei progetti dedicati. Vedi tecnologie/csharp/struttura-soluzione/03-organizzazione-core · regole/architettura.

Composition root

Punto centrale della solution dove si compone il grafo delle dipendenze: si registrano via DI le implementazioni concrete che soddisfano le interfacce usate dal codice. In ASP.NET Core è Program.cs del progetto Api; non contiene logica, solo registrazioni, tipicamente raggruppate in extension method per dominio (AddOrdini(), AddClienti()). Vedi tecnologie/csharp/struttura-soluzione/02-dipendenze.

DbContext

Classe EF che rappresenta la sessione con il database. Implementa il pattern Unit of Work: traccia le modifiche alle entity e le persiste atomicamente con SaveChanges(). Si inietta direttamente nei casi d'uso, non serve un layer repository aggiuntivo.

DelegatingHandler

Handler inseribile nella pipeline di HttpClient che intercetta ogni chiamata in uscita prima e dopo l'invio. È il punto d'aggancio idiomatico per attraversare in modo trasversale le chiamate verso servizi esterni (log, resilienza, autenticazione) senza che il codice chiamante lo sappia. Vedi tecnologie/csharp/esempi/log-chiamate-http.

Log integrale di chiamate HTTP

Registro che persiste l'intera chiamata HTTP (metodo, URL, headers e body di richiesta e risposta, esito e durata) in un'unica struttura con un campo Direzione che distingue inbound e outbound. Generico sul content-type: copre allo stesso modo le chiamate a servizi IA (JSON), REST e SOAP (XML). I metadati sono separati dal payload per non trascinare i body nelle query di log. Vedi tecnologie/csharp/esempi/log-chiamate-http.

Definition of Done

Criteri che un caso d'uso deve soddisfare per essere considerato completato: dominio aggiornato, test verdi, CI verde, deploy in staging, validazione end-to-end approvata. Vedi processi/sviluppo/03-validazione.

Decorator pattern

Pattern strutturale che avvolge un oggetto in un altro che ne implementa la stessa interfaccia, aggiungendo comportamento (logging, caching, retry, autorizzazione) senza modificarlo. In C# si compone manualmente in DI o tramite la libreria Scrutor. Vedi pattern-di-sviluppo/decorator · tecnologie/csharp/pattern/decorator.

Dependency Injection (DI)

Pattern per cui le dipendenze di una classe vengono fornite dall'esterno anziché create internamente. In ASP.NET Core il container DI integrato risolve le dipendenze automaticamente. I servizi si registrano con tre lifetimes: singleton, scoped, transient. Vedi tecnologie/csharp/16-dependency-injection.

DTO

Data Transfer Object. Modello usato per trasferire dati tra moduli o attraverso interfacce. Non è mai una copia 1:1 dell'entity del database: espone solo i campi necessari al chiamante, con nomi dall'Ubiquitous Language. Vivono nel progetto Models, organizzati per dominio. Vedi tecnologie/csharp/struttura-soluzione/07-models.

Authorization filter

Filter MVC eseguito prima di ogni action per verificare se la request è autorizzata. Implementa IAuthorizationFilter o IAsyncAuthorizationFilter. Adatto a logica di autorizzazione custom che non si esprime con le policy dichiarative standard. Vedi tecnologie/csharp/pipeline/12-authorization-filter.

Exception filter

Filter MVC che intercetta le eccezioni non gestite lanciate da action e filter. Consente di centralizzare la gestione degli errori a livello di controller con accesso al contesto MVC. Vedi tecnologie/csharp/pipeline/13-exception-filter.

FluentValidation

Libreria per la validazione dell'input con un'API fluente. I validator sono classi separate (AbstractValidator<T>) testabili in isolamento. Preferita a DataAnnotations per regole condizionali, messaggi personalizzati o validazioni tra campi. Vedi tecnologie/csharp/pipeline/18-validation.

Feature flag

Meccanismo che permette di abilitare o disabilitare funzionalità a runtime tramite configurazione, senza deploy. Rende possibile integrare codice incompleto su main senza esporlo agli utenti. I flag non sono permanenti: si rimuovono quando la funzionalità è stabile. Vedi tecnologie/git.

Electron

Framework open source che permette di distribuire applicazioni web come app desktop. Incorpora Chromium (per il frontend) e Node.js (per il processo principale). Il bundle risultante è pesante (~150 MB+) ma garantisce uniformità cross-platform. Vedi tecnologie/desktop/electron-puro · tecnologie/desktop/electron-net.

Electron.NET

Libreria che integra ASP.NET Core con Electron, consentendo di controllare la shell Electron da C# anziché da JavaScript. Il progetto desktop è una minimal ASP.NET Core app con Electron.NET; il WebAPI resta un processo separato. Vedi tecnologie/desktop/electron-net.

Factory Method

Pattern creazionale che incapsula la creazione di un oggetto dietro un metodo dedicato, separando chi richiede l'istanza da chi conosce il tipo concreto. Convive con [[Strategy pattern]]: una factory è spesso il selettore che restituisce la strategy giusta. Vedi pattern-di-sviluppo/factory-method · tecnologie/csharp/pattern/factory-method.

Fluent API

Metodo di configurazione EF tramite classi IEntityTypeConfiguration<T>. Preferito alle Data Annotations perché mantiene le entity class pulite e concentra la configurazione in un unico posto.

Heap (PostgreSQL)

Struttura in cui PostgreSQL memorizza le righe di una tabella: senza ordine fisico garantito. La chiave primaria è un indice B-tree univoco e non ordina la tabella, perciò in PostgreSQL non esiste un clustered index persistente. La località di accesso si ottiene con partizionamento, CLUSTER o indici BRIN. Vedi tecnologie/database-relazionali/postgres.

Indice di copertura

Indice non clustered che include tutte le colonne lette da una query (con INCLUDE), così il motore risponde senza accedere alla tabella (index-only scan). Vedi tecnologie/database-relazionali/sqlserver · tecnologie/database-relazionali/postgres.

IHttpClientFactory

Interfaccia ASP.NET Core per creare istanze HttpClient con gestione corretta del ciclo di vita degli handler HTTP. Evita socket exhaustion e DNS stale. Si usa tramite typed client o named client. Vedi tecnologie/csharp/integrazione/17-httpclient.

IQueryable<T>

Interfaccia che rappresenta una query non ancora eseguita su un database. EF traduce le espressioni LINQ in SQL e le esegue solo alla materializzazione (.ToList(), .FirstOrDefaultAsync(), ecc.). Restituire IQueryable da un metodo è una astrazione leaky: la query viene eseguita fuori dal controllo del metodo. Vedi tecnologie/csharp/entity-framework/02-queryable-vs-list.

Idempotenza

Proprietà di un'operazione che produce lo stesso risultato indipendentemente da quante volte viene eseguita con gli stessi input. Obbligatoria per operazioni critiche per gestire retry e timeout. Vedi processi/analisi-tecnica/04-contratti.

InternalsVisibleTo

Attributo assembly che concede a un progetto "amico" l'accesso ai membri internal senza renderli public. Il caso d'uso principale è dare visibilità completa di una libreria ai test unitari senza alterare la superficie pubblica. Vedi tecnologie/csharp/linguaggio/23-internals-visible-to.

Integrazioni (progetti di)

Progetti che isolano client HTTP/SOAP, librerie esterne (html2pdf, MailKit) e integrazioni con sistemi terzi. Espongono interfacce ad-hoc che wrappano la libreria sottostante: Core usa l'interfaccia, la libreria resta confinata nel progetto e non si propaga al resto della solution. Vedi tecnologie/csharp/struttura-soluzione/06-integrazioni.

IOptions<T>

Interfaccia ASP.NET Core per accedere alla configurazione tipizzata. Legge il valore una sola volta all'avvio. IOptionsMonitor<T> aggiorna il valore automaticamente se appsettings.json cambia. IOptionsSnapshot<T> ricalcola il valore per ogni request. Vedi tecnologie/csharp/07-configuration.

IUseCase

Interfaccia marker che identifica formalmente le classi che implementano un caso d'uso. Tutto ciò che implementa IUseCase è un caso d'uso; tutto il resto è un servizio che partecipa alla Unit of Work. Vedi tecnologie/csharp/struttura-soluzione/04-usecases · regole/entity-framework.

Middleware

Componente della pipeline HTTP di ASP.NET Core che elabora ogni request e response. Si compone in catena: ogni middleware può trasformare la request, passarla al successivo e poi trasformare la response al ritorno. Vedi tecnologie/csharp/pipeline/10-middleware.

Migration

File generato da EF che descrive una modifica incrementale allo schema del database. Il nome deve essere descrittivo della decisione di dominio. Le migration non si modificano dopo il push su main. Vedi regole/entity-framework.

Models (progetto)

Progetto che raccoglie i tipi condivisi tra Db, Core, UseCases e Api: DTO, enum di dominio e Result<T>. Contiene tipi puri, non comportamento: niente logica di business, niente validazione, niente factory di dominio. Non dipende da nessun altro progetto della solution. Vedi tecnologie/csharp/struttura-soluzione/07-models.

NSIS

Nullsoft Scriptable Install System. Sistema open source per creare installer Windows. Permette di copiare file, creare shortcut, scrivere chiavi di registro, gestire la disinstallazione e impostare percorsi per i dati applicativi (es. SQLite). È lo strumento di riferimento per distribuire app desktop .NET su Windows. Vedi tecnologie/desktop/installer-windows.

N+1 (problema)

Anti-pattern di accesso ai dati in cui si esegue una query per ottenere N record e poi N query aggiuntive per caricare dati correlati. Si risolve con Include per il caricamento eager o con proiezioni Select che portano solo i dati necessari in un'unica query. Vedi tecnologie/csharp/entity-framework/02-queryable-vs-list.

NFR

Requisiti Non Funzionali. Requisiti che descrivono come il sistema si comporta: performance, sicurezza, resilienza, tracciabilità, compatibilità. Vanno resi espliciti con metriche verificabili. Vedi processi/analisi-tecnica/06-nfr.

Record (C#)

Tipo reference con semantica di valore: l'uguaglianza è basata sul contenuto delle proprietà, non sull'identità in memoria. Le proprietà sono init-only per default (immutabili dopo la costruzione). Si copia con modifiche tramite with. Ideale per DTO, value object e response model. Vedi tecnologie/csharp/linguaggio/22-records.

rowid (SQLite)

Colonna intera implicita che SQLite usa come chiave di ordinamento fisico (il clustered index del motore). Una colonna INTEGER PRIMARY KEY ne diventa un alias. Una tabella WITHOUT ROWID rinuncia al rowid e usa la propria chiave primaria come chiave di clustering. Vedi tecnologie/database-relazionali/sqlite.

Resilienza (HTTP)

Capacità di gestire errori transitori nelle chiamate a servizi esterni tramite retry, circuit breaker e timeout. In ASP.NET Core si configura con Microsoft.Extensions.Http.Resilience (built on Polly). Vedi tecnologie/csharp/integrazione/21-resilience.

Result pattern

Pattern che incapsula l'esito di un'operazione in un oggetto Result<T>, distinguendo esplicitamente successo e fallimento senza usare eccezioni per il controllo del flusso. Result<T> vive in Models, prodotto da UseCases e consumato da Api. Vedi tecnologie/csharp/struttura-soluzione/07-models · regole/gestione-errori.

Rilascio assistito dall'IA

Skill che esegue un rilascio completo (bump di versione, changelog, commit e tag) alla pari di commit-and-tag-version, ma con il changelog prodotto analizzando i commit (e i diff) rispetto al tag precedente, anziché parsando i prefissi dei commit. Il livello semver può essere inferito dalla natura reale delle modifiche. Vedi ia/skills/rilascio-ia.

Observer / Pub-Sub

Pattern comportamentale che notifica un numero variabile di consumatori al verificarsi di un evento, senza che il produttore conosca chi ascolta. In C# si realizza in-process con MediatR INotification e cross-process con MassTransit su broker (RabbitMQ, Azure Service Bus). Vedi pattern-di-sviluppo/observer · tecnologie/csharp/pattern/observer.

Problem Details

Standard RFC 9457 per il formato strutturato di risposte di errore HTTP. Usa il media type application/problem+json con campi fissi (type, title, status, detail, instance) e proprietà custom. ASP.NET Core offre ProblemDetails e ProblemDetailsOptions per implementarlo. Vedi tecnologie/csharp/pipeline/14-problem-details.

Partizionamento (database)

Tecnica che spezza una tabella in più partizioni fisiche per intervallo o per lista su una colonna di accesso (data, tenant). In PostgreSQL è dichiarativo (PARTITION BY) e abilita il partition pruning: una query tocca solo le partizioni rilevanti. È il sostituto strutturale del clustering su PostgreSQL. Vedi tecnologie/database-relazionali/postgres.

Prompt (system e user)

Le due parti di un'istruzione a un modello linguistico. Il system prompt fissa ruolo, vincoli e tono e lo governa chi cura il prodotto; lo user prompt è il template con i dati della richiesta, spesso con segnaposto {{variabile}} riempiti a runtime. Tenerli su database, separati per caso d'uso, permette di modificarli senza release. Vedi tecnologie/csharp/esempi/db-prompt-ai.

Pride versioning

Pratica di gonfiare i numeri di versione per ragioni di immagine o marketing anziché per rispecchiare l'entità reale delle modifiche. Esempi: saltare da v1.x a v2.0 senza breaking changes, rilasciare una v10.0 in coincidenza di un anniversario. Distorce il contratto comunicativo del versioning e può trarre in inganno chi automatizza gli aggiornamenti. Vedi regole/versionamento.

Serilog

Libreria di logging strutturato per .NET. Principale alternativa a Microsoft.Extensions.Logging puro. Supporta sink multipli (console, file, database, Seq, Application Insights, OpenTelemetry), log strutturati nativi e configurazione da appsettings.json. Vedi tecnologie/csharp/osservabilita/logging · tecnologie/csharp/esempi/serilog-db.

Sidecar

Processo esterno avviato e gestito da un'applicazione principale. Nel contesto desktop, il WebAPI C# viene eseguito come sidecar dalla shell (Electron, Tauri, WPF): viene avviato all'apertura dell'app e terminato alla chiusura. Vedi tecnologie/desktop.

Screaming Architecture

Principio per cui la struttura del codice comunica immediatamente cosa fa il sistema. Le cartelle si chiamano Ordini/, Fatturazione/, non Services/, Repositories/. Vedi regole/architettura.

Semantic Versioning

Schema di versioning MAJOR.MINOR.PATCH: MAJOR per breaking changes, MINOR per nuove funzionalità retrocompatibili, PATCH per bug fix. Vedi regole/versionamento.

Sink (Serilog)

Destinazione di scrittura dei log in Serilog: console, file, database, Seq, Application Insights, ecc. Si possono configurare più sink contemporaneamente, con livelli minimi differenti per ciascuno. È possibile scrivere sink custom implementando ILogEventSink. Vedi tecnologie/csharp/osservabilita/logging.

Skill (IA)

Procedura operativa ripetibile che un agente IA esegue sul progetto: una sequenza di passi con vincoli espliciti, descritta una sola volta e versionata insieme al codice. La pagina che la descrive ha doppia natura: documentazione e specifica operativa da cui l'agente esegue. Vedi ia/skills.

Soft delete

Tecnica per non eliminare fisicamente un record, ma marcarlo come eliminato tramite un campo DeletedAt nullable. Se è null il record è attivo, se ha una data è eliminato. Un singolo campo, zero ambiguità, non si usano combinazioni di campi booleani e date (vedi il tip sulle combinazioni inconsistenti). Preserva la storia e la compatibilità con dati storici. Va progettato fin dall'inizio se richiesto.

Spike

Task a tempo fisso per esplorare un'incertezza tecnica. Produce una risposta (documento, prototipo, decisione), non un'implementazione. Ha una durata massima definita. Vedi processi/analisi-tecnica/07-piano.

Staging

Ambiente intermedio tra sviluppo e produzione. Riceve ogni versione prima che arrivi in produzione. La validazione end-to-end avviene qui. Vedi regole/ambienti.

Strategy pattern

Pattern comportamentale che incapsula una famiglia di algoritmi intercambiabili dietro un'interfaccia comune, permettendo di variare il comportamento a runtime senza modificare il contesto. In C# si implementa tipicamente con IEnumerable<T> (selezione a runtime) o con keyed services (selezione dichiarativa). Vedi pattern-di-sviluppo/strategy · tecnologie/csharp/pattern/strategy.

Tauri

Framework per app desktop che usa il webview nativo del sistema operativo (WebKit su macOS/Linux, WebView2 su Windows) e un backend Rust. Produce bundle molto leggeri (~5–15 MB). In combinazione con un WebAPI C#, il backend gira come sidecar esterno. Vedi tecnologie/desktop/tauri.

Trunk-based development

Strategia di branching in cui tutto il lavoro confluisce direttamente su main. I branch, se usati, hanno vita brevissima. Le funzionalità incomplete si nascondono tramite feature flag. Vedi tecnologie/git.

Ubiquitous Language

Linguaggio condiviso tra developer, analisti e stakeholder: i nomi del dominio si usano ovunque nel codice, senza sinonimi, abbreviazioni o traduzioni. Vedi regole/dominio.

WITHOUT ROWID

Opzione SQLite che crea una tabella priva di rowid: la chiave primaria diventa direttamente la chiave di clustering, ordinando fisicamente le righe sul criterio scelto. Utile per chiavi naturali e accessi per intervallo; va valutata perché gli indici secondari duplicano la PK completa. Vedi tecnologie/database-relazionali/sqlite.

WebView2

Controllo browser Microsoft basato su Chromium Edge, disponibile solo su Windows. Permette di ospitare una webview dentro un'applicazione WPF, WinForms o WinUI senza includere Chromium nel bundle: usa il runtime Edge già installato sul sistema. Supporta SetVirtualHostNameToFolderMapping per servire file statici locali senza un server HTTP. Vedi tecnologie/desktop/webview2.

Unit of Work

Pattern che raggruppa più operazioni in una singola transazione. In EF, DbContext è già una Unit of Work. I servizi di dominio partecipano senza chiuderla, è il caso d'uso (in UseCases) che chiama SaveChanges(). Vedi tecnologie/csharp/struttura-soluzione/04-usecases · regole/entity-framework.

UseCases (livello)

Livello tra Core e i progetti di alto livello (Api, Console, Worker). Contiene i comandi completi: orchestrano i servizi di Core, chiudono la unit of work con SaveChanges e restituiscono un Result. Spesso vive come sottocartella di Core (Core/UseCases/); diventa progetto first-class quando cresce. Vedi tecnologie/csharp/struttura-soluzione/04-usecases.