Frage

Wertobjekte haben keine Identität. ORM braucht Identität, die Datenbank zu aktualisieren.

Wie ORM zu betrügen?

(Id für Wertobjekt als interne Markierung wird nicht funktionieren, weil ORM in einer anderen Baugruppe lebt und an derselben Baugruppe bewegt, ist nicht akzeptabel).

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Soweit mein Verständnis von DDD geht Wert Objekte nur ein Weg sind Ihre Einheiten zu unterteilen. Wenn ein Wertobjekt sollte mit einer ID in der Datenbank gespeichert wird, ist es nicht ein Wertobjekt.

Beispiel:

Das Domain-Modell sieht wie folgt aus (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; }
}

Die entsprechende Datenbank-Tabelle so etwas wie diese (Pseudo-SQL) aussehen:

CREATE TABLE Customers
(
    CustomerID,

    LastName,

    HomeAddress_Street,

    HomeAddress_City,

    HomeAddress_ZipCode,
)

Zum Speichern der Adressen in einer separaten Tabelle, die Sie es ein Unternehmen machen würde, die eine ID hat.

Andere Tipps

Als Eric Evans spricht über „Entitäten haben Identität, Wert Objekte nicht“, er spricht nicht über eine ID-Spalte in der Datenbank - er spricht Identität als ein Konzept

.

VOs haben keine konzeptuell Identität. Das bedeutet nicht, dass sie nicht haben sollte Ausdauer Identität. Nicht Ausdauer Implementierung Wolke Ihr Verständnis von Entities vs VOs lassen.

Siehe mein Beitrag hier .

Persönlich habe ich das Id-Feld in dem Wertobjekt - ich habe es als ein weiteres Attribut des Wertobjekts zu behandeln (wie Namen, Standort usw.).

Es kann nicht wahr DDD sein, aber es funktioniert für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top