Question

Les objets de valeur n'ont pas d'identité.ORM a besoin d'une identité pour mettre à jour la base de données.

Comment tromper ORM ?

(Marquer l'ID de l'objet de valeur comme interne ne fonctionnera pas car ORM réside dans un assemblage différent et le déplacer vers le même assemblage n'est pas acceptable).

Merci d'avance.

Était-ce utile?

La solution

En ce qui concerne ma compréhension de DDD va des objets de valeur sont juste une façon de partitionner vos entités. Si doit être stocké un objet de valeur avec un ID dans la base de données, il est pas un objet de valeur.

Exemple:

Le modèle de domaine ressemble à ceci (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 table de base de données correspondante ressemblerait à quelque chose comme ceci (pseudo-SQL):

CREATE TABLE Customers
(
    CustomerID,

    LastName,

    HomeAddress_Street,

    HomeAddress_City,

    HomeAddress_ZipCode,
)

Pour enregistrer les adresses dans une table séparée vous en faire une entité qui a une carte d'identité.

Autres conseils

Quand Eric Evans parle de « les entités ont une identité, contrairement aux objets de valeur », il ne parle pas d'une colonne ID dans la base de données - il parle de l'identité en tant que concept.

Les VO n'ont pas conceptuel identité.Cela ne veut pas dire qu'ils n'auraient pas dû persistance identité.Ne laissez pas la mise en œuvre de la persistance obscurcir votre compréhension des entités par rapport aux VO.

Voir mon message ici.

personnellement je le champ ID dans l'objet de valeur - Je traite comme un autre attribut de l'objet de valeur (tels que le nom, l'emplacement, etc.).

Il ne peut pas être vrai DDD mais il fonctionne pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top