Por lo que respecta a mi comprensión de DDD, los objetos de valor son solo una forma de particionar sus entidades. Si un objeto de valor debe almacenarse con una ID en la base de datos, no es un objeto de valor.
Ejemplo:
El modelo de dominio se parece a esto (C#):
public class Customer : Entity
{
public Guid CustomerID { get; }
public string LastName { get; set; }
public Address HomeAddress { get; set; }
}
public class Address : ValueObject
{
public string Street { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
La tabla de base de datos correspondiente sería algo como esto (Pseudo-SQL):
CREATE TABLE Customers
(
CustomerID,
LastName,
HomeAddress_Street,
HomeAddress_City,
HomeAddress_ZipCode,
)
Para almacenar las direcciones en una tabla separada, sería una entidad que tiene una ID.
Pero luego el modelo de dominio es solo 1: 1 de la base de datos, la dirección puede seguir siendo un objeto de valor y aún tener una tabla separada. – TWith2Sugars
No, no es un 1: 1 de la base de datos. Tiene una clase de Cliente y una clase de Dirección (que es el objeto de valor). En NHibernate, un objeto de valor se asigna como un componente. Tan pronto como tenga una entidad que necesita un Id, ya no será un objeto de valor. –
Pero si necesita guardar la dirección en una tabla, requerirá una identificación de la base de datos. El hecho de que la base de datos requiera una identificación no significa que el objeto sea instantáneamente una entidad. – TWith2Sugars