Ich denke, dass dies subjektiv ist und von Ihrem Design abhängt.
Meistens scheint dies ein Entwurf zu sein, der aus einem aktiven Datensatz stammt . In einem aktiven Datensatz verfügt Ihre Entität über Methoden zum Ausführen von Datenbankoperationen und muss daher auch die Datenbankkennung kennen.
Wenn Sie andere Muster verwenden, z. B. ein Repository mit einem Daten-Mapper, der diese Daten im Objekt speichert, wird dies unnötig und möglicherweise unangemessen.
Nehmen Sie zum Beispiel ein Person
Objekt. Mir wird ein Name gegeben, der innerhalb einer Familie eindeutig sein kann oder nicht. Da die Bevölkerung gewachsen ist, sind größere Namen nicht mehr eindeutig und wir haben Ersatzkennungen für immer größere Systeme entwickelt. Beispiele hierfür sind: mein Führerschein und die Sozialversicherungsnummer. Mir wurde keine ID zugewiesen, alle diese IDs müssen beantragt werden.
Die meisten davon sind keine guten Primärschlüssel / IDs für Software, da sie nicht universell sind. Zumindest nicht außerhalb ihres spezifischen Systems ist eine SSN eindeutig und für die Verwaltung der sozialen Sicherheit einheitlich. Da wir in der Regel nicht die Anbieter dieser Informationen sind, würden Sie sie nicht anrufen, id
sondern die Daten, die sie darstellen, z SSN
. Manchmal kann sogar das vollständig zusammengesetzte Objekt enthalten sein, z. B. ein Objekt, DriversLicense
das alle Informationen enthalten kann, die der Führerschein enthält.
Alle allgemeinen IDs sind daher Ersatzschlüssel im System und können durch Speicherreferenzen ersetzt werden, die nur IDs enthalten, um das Nachschlagen und die Speicherung von Datensätzen zu vereinfachen.
Da es sich bei an id
nicht um konzeptuelle Daten handelt, bezweifle ich, dass sie (allgemein) zum Objekt gehören, da sie nicht aus der Domäne stammen. Vielmehr sollte es zu seinem Zweck erhalten bleiben, ein Objekt zu identifizieren, das keine andere Möglichkeit hat, eine eindeutige Identität darzustellen. Dies könnte mit easy in einem Repository / einer Sammlung geschehen.
Wenn Sie das Objekt in der Software als Liste darstellen oder beibehalten müssen, können Sie dies einfach über das Repository / Collection-Objekt oder ein anderes damit verbundenes Objekt tun. Bei der Weitergabe an den Data Mapper (falls dieser separat ist) können Sie einfach weitergeben .update( id, obj )
.
Haftungsausschluss : Ich habe noch nicht versucht, ein System zu erstellen, das die ID nicht in der Entität enthält, und kann mich daher als falsch erweisen.