Myślę, że jest to subiektywne i zależy od twojego projektu.
Najczęściej wydaje się, że jest to projekt pochodzący z aktywnego rekordu . W aktywnym rekordzie twoja jednostka ma metody wykonywania operacji na bazie danych, dlatego też musi znać swój identyfikator bazy danych.
Podczas korzystania z innych wzorców, takich jak repozytorium z maperem danych, przechowywanie tych danych w obiekcie staje się niepotrzebne i być może nieodpowiednie.
Weźmy na przykład Person
przedmiot. Nadano mi imię, które może, ale nie musi być unikalne w rodzinie. Ponieważ populacja się powiększyła, nazwiska nie są już unikalne, dlatego opracowaliśmy identyfikatory zastępcze dla coraz większego systemu. Przykłady obejmują: moje prawo jazdy i numer ubezpieczenia społecznego. Nie urodziłem się z przypisanym identyfikatorem, wszystkie te identyfikatory należy złożyć.
Większość z nich nie tworzy dobrych kluczy / identyfikatorów dla oprogramowania, ponieważ nie są uniwersalne. Przynajmniej nie poza ich specyficznym systemem, oczywiście SSN jest unikalny i spójny z administracją zabezpieczenia społecznego. Ponieważ generalnie nie jesteśmy dostawcami tych informacji, nie nazwałbyś ich, id
lecz dane, które reprezentują, np SSN
. Czasami nawet zawierają w pełni skomponowany obiekt, taki jak taki, DriversLicense
który może zawierać wszystkie informacje zawarte w prawie jazdy.
Wszystkie ogólne identyfikatory są zatem kluczami zastępczymi w systemie i można je zastąpić odwołaniami do pamięci, zawierającymi tylko identyfikatory, aby ułatwić wyszukiwanie i utrwalanie rekordów.
Ponieważ an id
nie jest fragmentem danych pojęciowych, wątpię, aby (ogólnie) należał do obiektu, ponieważ nie pochodzi z domeny. Należy raczej zachować cel, jakim jest identyfikacja obiektu, który nie ma innego sposobu na przedstawienie unikalnej tożsamości. Można to łatwo zrobić w repozytorium / kolekcji.
W oprogramowaniu, jeśli chcesz reprezentować obiekt jako listę lub utrwalić go, możesz po prostu zrobić to z obiektu repozytorium / kolekcji lub innego obiektu z tym związanego. Przekazując program do mapowania danych (jeśli jest osobny), możesz po prostu przekazać .update( id, obj )
.
Oświadczenie : Nie próbowałem jeszcze zbudować systemu, który nie zawiera identyfikatora wewnątrz bytu, a zatem może się okazać, że się mylę.