Я думаю, что это субъективно и зависит от вашего дизайна.
Главным образом, хотя это, кажется, дизайн, который исходит из активной записи . В активной записи у вашей сущности есть методы для выполнения операций с базой данных, и поэтому она также должна знать свой идентификатор базы данных.
При использовании других шаблонов, таких как хранилище с картографом данных, сохранение этих данных в объекте становится ненужным и, возможно, неуместным.
Возьмите для примера Personобъект. Мне дано имя, которое может быть или не быть уникальным в семье. Поскольку население увеличилось, имена больше не являются уникальными, и поэтому мы придумали суррогатные идентификаторы для все более крупной системы. Примеры этого включают в себя: мои водительские права и номер социального страхования. Я не родился с присвоенным идентификатором, все эти идентификаторы должны быть применены.
Большинство из них не делают хорошие первичные ключи / идентификаторы для программного обеспечения, поскольку они не универсальны. По крайней мере, вне их конкретной системы, очевидно, что SSN является уникальным и непротиворечивым для Администрации социального обеспечения. Поскольку мы, как правило, не являемся поставщиками этой информации, вы бы не называли их, idа скорее представляли данные, которые они представляют, например SSN. Иногда даже содержат полностью составленный объект, например, DriversLicenseкоторый может содержать всю информацию, которую содержит водительское удостоверение.
Таким образом, все общие идентификаторы являются суррогатными ключами в системе и могут быть заменены ссылками в памяти, содержащие только идентификаторы, чтобы упростить поиск и сохранение записей.
Поскольку an idне является частью концептуальных данных, я сомневаюсь, что они (как правило) принадлежат к объекту, так как они не принадлежат области. Скорее это должно быть сохранено для его цели, которая состоит в том, чтобы идентифицировать объект, у которого нет никакого другого способа представить уникальную идентичность. Это может быть сделано в хранилище / коллекцию с легкостью.
В программном обеспечении, если вам нужно представить объект в виде списка или сохранить его, вы можете просто сделать это из объекта репозитория / коллекции или какого-либо другого объекта, связанного с этим. При переходе к Data Mapper (если он отдельный) вы можете просто пройти .update( id, obj ).
Отказ от ответственности : я еще не пытался создать систему, которая не содержит идентификатор в сущности и, таким образом, может оказаться неправым.