Passa al contenuto principale

Models

Cosa contiene

Il progetto Models raccoglie i tipi condivisi tra più progetti della solution:

  • DTO — request, response, command, query — i tipi che Core, UseCases e Api si scambiano.
  • Enum di dominioOrdineStato, ClienteTipo, MetodoPagamento. Sono elenchi di costanti, non comportamento, e vivono fuori dalle entità.
  • Result<T> — pattern di ritorno strutturato per successo/errore, prodotto da UseCases e consumato da Api.

Models contiene tipi, non comportamento. Niente logica di business, niente validazione, niente factory di dominio. I DTO si scrivono come record per immutabilità (vedi Convenzioni).

Cosa NON contiene

  • Entità di dominio (Ordine, Cliente) — vivono in Db con il DbContext
  • Domain service (GestoreScorte) — vivono in Core
  • Validator — vivono in Core, accanto al dominio che validano
  • Use case — vivono in UseCases

Struttura

Organizzata per dominio, come Core:

src/models/
├── models.csproj # NomeSoluzione.Models
├── Ordini/
│ ├── CreaOrdineDto.cs
│ ├── OrdineDettaglioDto.cs
│ └── OrdineStato.cs
├── Clienti/
│ ├── RegistraClienteDto.cs
│ └── ClienteDettaglioDto.cs
└── Shared/
└── Result.cs

Dipendenze

Models non dipende da nessun altro progetto. È la base trasversale referenziata da Db (per gli enum nelle entità) e Core (per DTO ed enum nei domain service e validator). Api e UseCases ne ottengono i tipi transitivamente.

Db ──▶ Models
Core ──▶ Models

❌ Da evitare: aggiungere logica in Models (metodi di business, costruttori con validazione, factory di dominio). Se un DTO richiede logica di costruzione, quella logica vive nel domain service o nel validator. Models resta una raccolta di tipi puri.