La maggior parte delle volte, il campo ID
di cui si sta parlando sarebbe generato dal database, ad es. come una sequenza RDBMS o un identificatore univoco NoSQL . È quindi legato al corrispondente database utilizzato.
In base al principio Persistenza Ignoranza / Persistenza poliglotta , dovresti nascondere questo ID
dal tuo dominio aggregato come il più possibile.
In pratica, il tuo dominio Aggregati potrebbe già avere un identificativo univoco. Ad esempio, un numero di serie, un codice cliente, un nome di accesso, un numero di conto, un riferimento di fattura o un codice ISBN per un libro.
Se non esiste un identificatore "naturale" nel modello, potrebbe essere un ruolo della logica di dominio generare tali identificatori autentici, ad es. seguendo un modello definito dalla normativa, o nozioni umane-friendly, seguendo la migliore prassi aziendale (è comune includere l'anno e il mese nei numeri di fattura o un identificatore alfanumerico del dipartimento responsabile del processo, ad esempio).
All'interno di Infrastructure Layer , probabilmente lascerai apparire un campo ID
, specialmente se hai bisogno di costruire query SQL unite tra diverse tabelle RBDMS. Oppure, se si utilizza un ORM, non è possibile mantenere direttamente gli oggetti di aggregazione DDD come oggetti ORM, ma utilizzare un livello di traduzione "agnostico". Questo è ad esempio ciò che il nostro framework DDD propone , aggiungendo un livello di traduzione tra gli oggetti semplici DDD e gli oggetti ORM, che hanno il proprio ID ... una sorta di "ORM quadrato": sul mappatore DDD su un mappatore ORM.
DDD riguarda principalmente isolamento : non inquinare il tuo dominio con considerazione del database! Denominare un campo oggetto aggregato come ID
ha un odore definitivo: probabilmente c'è un altro nome, compatibile con il Linguaggio Ubiquitous del tuo contesto limitato, che può essere usato al posto di un semplice ID
.