Creo que esto es subjetivo y depende de su diseño.
Principalmente, aunque parece ser un diseño que proviene de un registro activo . En un registro activo, su entidad tiene métodos para realizar operaciones de base de datos y, por lo tanto, también debe conocer su identificador de base de datos.
Cuando se utilizan otros patrones, como un repositorio con un mapeador de datos, almacenar estos datos en el objeto se vuelve innecesario y quizás inapropiado.
Tomemos por ejemplo un Personobjeto. Me dan un nombre que puede o no ser único dentro de una familia. A medida que la población ha crecido, los nombres más grandes ya no son únicos, por lo que hemos creado identificadores sustitutos para un sistema cada vez más grande. Ejemplos de estos incluyen: mi licencia de conducir y número de seguro social. No he nacido asignado una identificación, todas estas identificaciones deben ser solicitadas.
La mayoría de estos no son buenas claves / identificadores primarios para el software, ya que no son universales. Al menos no fuera de su sistema específico, obviamente un SSN es único y consistente para la Administración del Seguro Social. Dado que generalmente no somos los proveedores de esta información, no los llamaría idsino los datos que representan, por ejemplo SSN. A veces, incluso contienen el objeto compuesto completo, como el DriversLicenseque podría contener toda la información que contiene la licencia de conducir.
Por lo tanto, todas las identificaciones generales son claves sustitutas en el sistema, y podrían reemplazarse con referencias en la memoria, que solo contienen identificaciones para facilitar la búsqueda y los registros persistentes.
Dado que un idno es un dato conceptual, dudo que (generalmente) pertenezca al objeto, ya que no proviene del dominio. Más bien, debe mantenerse para su propósito, que es identificar un objeto que no tiene otra forma de representar una identidad única. Esto podría hacerse en un repositorio / colección con facilidad.
En el software, si necesita representar el objeto como una lista, o persistirlo, simplemente puede hacerlo desde el objeto de repositorio / colección, o algún otro objeto asociado con eso. Al pasar al Data Mapper (si está separado), simplemente puede pasar .update( id, obj ).
Descargo de responsabilidad : todavía no he intentado construir un sistema que no contenga la identificación dentro de la entidad y, por lo tanto, puede demostrar que estoy equivocado.