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