Soweit mein Verständnis von DDD Wertobjekte sind, geht nur ein Weg, um Ihre Einheiten zu unterteilen. Wenn ein Wertobjekt mit einer ID in der Datenbank gespeichert werden soll, ist es kein Wertobjekt.
Beispiel:
Das Domain-Modell wie dieser (C#) aussieht:
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,
)
Um die Adressen in einer separaten Tabelle zu speichern, würden Sie daraus eine Entität mit einer ID machen.
Aber dann ist das Domain-Modell nur 1: 1 der Datenbank, die Adresse kann immer noch ein Wert-Objekt sein und immer noch eine separate Tabelle haben. – TWith2Sugars
Nein, es ist kein 1: 1 der Datenbank. Sie haben eine Kundenklasse und eine Adressklasse (was das Wertobjekt ist). In NHibernate wird ein Wertobjekt als Komponente zugeordnet. Sobald Sie eine Entität haben, die eine ID benötigt, ist sie kein Wertobjekt mehr. –
Aber wenn Sie die Adresse in einer Tabelle speichern müssen, wird eine ID von der Datenbank benötigt. Nur weil die Datenbank eine ID benötigt, bedeutet das nicht, dass das Objekt sofort eine Entität ist. – TWith2Sugars