Pregunta

Los objetos de valor no tienen identidad. ORM necesita identidad para actualizar la base de datos.

¿Cómo engañar a ORM?

(Marcado Id para el objeto de valor como interna no funcionará porque ORM vive en un conjunto diferente y moverlo a la misma montaje no es aceptable).

Gracias de antemano.

¿Fue útil?

Solución

En lo que a mi comprensión de DDD va objetos de valor son sólo una forma de partición de sus entidades. Si un objeto de valor debe ser almacenado con un 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 se verí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 que haría que una entidad que tenga una identificación.

Otros consejos

Cuando Eric Evans habla de "entidades tienen identidad, el valor de los objetos no lo hacen", él no está hablando de una columna de ID en la base de datos - que está hablando acerca de la identidad como un concepto

.

VO no tienen conceptual identidad. Eso no significa que no deberían tener persistencia identidad. No deje que la aplicación persistencia nuble su comprensión de Entidades vs VO.

aquí .

Personalmente tengo el campo ID en el objeto de valor - trato como otro atributo del objeto de valor (como el nombre, la ubicación, etc.).

Puede que no sea cierto DDD pero funciona para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top