Domanda

oggetti di valore non hanno identità. ORM ha bisogno di identità per aggiornare il database.

Come ingannare ORM?

(Marcatura Id per oggetto valore interno non funzionerà perché ORM vive in un gruppo diverso e spostandolo stesso assembly non è accettabile).

Grazie in anticipo.

È stato utile?

Soluzione

Per quanto riguarda la mia comprensione delle DDD va oggetti di valore sono solo un modo per partizionare i soggetti. Se un oggetto di valore deve essere conservato con un ID nel database non è un oggetto di valore.

Esempio:

Il modello di dominio assomiglia a questo (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 tabella di database corrispondente sarebbe simile a questa (pseudo-SQL):

CREATE TABLE Customers
(
    CustomerID,

    LastName,

    HomeAddress_Street,

    HomeAddress_City,

    HomeAddress_ZipCode,
)

Per memorizzare gli indirizzi in una tabella separata si dovrebbe rendere più un'entità che ha un ID.

Altri suggerimenti

Quando Eric Evans parla di "entità hanno identità, oggetti di valore non", non sta parlando di una colonna ID nel database - sta parlando identità di concetto

.

VO non hanno concettuale identità. Ciò non significa che non dovrebbero avere persistenza identità. Non lasciate che la persistenza implementazione nuvola la vostra comprensione degli Enti vs VO.

qui .

Personalmente ho il campo Id nell'oggetto valore - mi trattano come un altro attributo dell'oggetto valore (come nome, posizione, ecc).

Non può essere vero DDD ma funziona per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top