Я думаю, що це суб’єктивно і залежить від вашого дизайну.
Переважно, хоча це, здається, є дизайном, який походить з активного запису . В активному записі ваша організація має методи виконання операцій з базою даних, а тому повинна знати, що це ідентифікатор бази даних.
При використанні інших шаблонів, таких як сховище з картографією даних, що зберігає ці дані в об'єкті, стає непотрібним і, можливо, недоречним.
Візьмемо для прикладу Personпредмет. Мені дають ім’я, яке може бути або не бути унікальним у сім'ї. Оскільки кількість населення зростає, імена більше не є унікальними, і тому ми придумали сурогатні ідентифікатори для все більш масштабної системи. Приклади цього включають: моє водійське посвідчення та номер соціального страхування. Мені не народжується присвоєний ідентифікатор, всі ці ідентифікатори повинні бути подані на заявку.
Більшість із них не мають гарних первинних ключів / ідентифікаторів для програмного забезпечення, оскільки вони не є універсальними. Принаймні, не за межами їх конкретної системи, очевидно, що SSN є унікальним та послідовним для Адміністрації соціального захисту. Оскільки ми, як правило, не є постачальниками цієї інформації, ви б не називали їх, idа скоріше даними, які вони представляють, наприклад SSN. Іноді навіть містяться повністю складені об'єкти, такі як, DriversLicenseякий може містити всю інформацію, яку має водійське посвідчення.
Таким чином, всі загальні ідентифікатори є сурогатними ключами в системі, і їх можна замінити на посилання на пам'ять, лише містять ідентифікатори для полегшення пошуку та збереження записів.
Оскільки а idне є частиною концептуальних даних, я сумніваюся, що він (як правило) належить до об'єкта, оскільки він не походить з домену. Швидше за все, слід дотримуватися своєї мети - виявити об'єкт, який не має іншого способу представити унікальну ідентичність. Це можна зробити легко у сховищі / колекції.
У програмному забезпеченні, якщо вам потрібно представити об'єкт як список або зберегти його, ви можете просто зробити це з об'єкту сховища / колекції або іншого об'єкта, пов'язаного з цим. Переходячи до Data Mapper (якщо він окремий), ви можете просто пройти .update( id, obj ).
Відмова від відповідальності : Я ще не намагався створити систему, яка не містить ідентифікатора в межах сутності, і, таким чином, я можу виявити себе неправильним.