Penso che questo sia soggettivo e dipende dal tuo design.
Per lo più questo sembra essere un design proveniente da un record attivo . In una registrazione attiva, l'entità ha metodi per eseguire operazioni di database e, pertanto, deve conoscere anche l'identificatore del database.
Quando usi altri modelli come un repository con un data mapper l'archiviazione di questi dati nell'oggetto diventa inutile e forse inappropriata.
Prendi ad esempio un oggetto Person
. Mi viene dato un nome che può o non può essere unico all'interno di una famiglia. Dato che la popolazione è cresciuta, i nomi più grandi non sono più unici e quindi abbiamo creato identificatori surrogati per un sistema sempre più grande. Esempi di questi includono: la mia patente di guida e il numero di previdenza sociale. Non sono nato con un ID, tutti questi ID devono essere richiesti.
La maggior parte di questi non rende valide le chiavi / id principali per il software, in quanto non sono universali. Almeno non al di fuori del loro sistema specifico, ovviamente un SSN è unico e coerente per l'Amministrazione della sicurezza sociale. Dato che non siamo generalmente i fornitori di queste informazioni, non le chiamerebbero un id
, ma piuttosto i dati che rappresentano, ad es. %codice%. A volte persino contiene l'oggetto composto completo come SSN
che potrebbe contenere tutte le informazioni della licenza del conducente.
Tutti gli ID generali sono quindi chiavi surrogate nel sistema e potrebbero essere sostituiti con riferimenti di memoria, contenenti solo ID per facilitare la ricerca e la persistenza dei record.
Poiché un DriversLicense
non è un dato concettuale, dubito che esso (in genere) appartenga all'oggetto, in quanto non proviene dal dominio. Piuttosto dovrebbe essere mantenuto al suo scopo che è quello di identificare un oggetto che non ha altro modo di rappresentare un'identità unica. Questo potrebbe essere fatto in un repository / raccolta con facile.
Nel software se devi rappresentare l'oggetto come una lista, o persistere, puoi semplicemente farlo dall'oggetto repository / collection, o qualche altro oggetto associato a questo. Passando al Data Mapper (se è separato), puoi semplicemente passare id
.
Dichiarazione di non responsabilità : non ho ancora provato a creare un sistema che non contenga l'id all'interno dell'entità e possa quindi dimostrarmi sbagliato.