DDD: Identität der Entität, bevor sie beibehalten wird

Im domänengetriebenen Design ist eines der bestimmenden Merkmale einer Entität, dass sie eine Identität hat.

Problem:

Ich kann Entities bei der Instanzerstellung keine eindeutige Identität zuweisen. Diese Identität wird erst vom Repository bereitgestellt, wenn die Entität persistent ist (dieser Wert wird aus der zugrunde liegenden Datenbank bereitgestellt).

Ich kann nicht anfangen zu benutzenGuid Werte an dieser Stelle. Die vorhandenen Daten werden mit gespeichertint Primärschlüsselwerte und ich kann keine eindeutige Ganzzahl bei der Instanziierung generieren.

Meine Lösung:

Jede Entität hat einen IdentitätswertDie Identität wird erst dann auf eine echte Identität gesetzt, wenn sie bestehen bleibt (von der Datenbank bereitgestellt).Die Identität wird bei der Instanziierung vor der Persistenz auf den Standardwert gesetztWenn die Identität Standard ist, sind Entitäten durch Referenz vergleichbarWenn die Identität keine Standardidentität ist, sind Entitäten durch Identitätswerte vergleichbar

Code (die abstrakte Basisklasse für alle Entitäten):

public abstract class Entity<IdType>
{
    private readonly IdType uniqueId;

    public IdType Id
    {
        get 
        { 
            return uniqueId; 
        }
    }

    public Entity()
    {
        uniqueId = default(IdType);
    }

    public Entity(IdType id)
    {
        if (object.Equals(id, default(IdType)))
        {
            throw new ArgumentException("The Id of a Domain Model cannot be the default value");
        }

        uniqueId = id;
    }

    public override bool Equals(object obj)
    {
        if (uniqueId.Equals(default(IdType)))
        { 
            var entity = obj as Entity<IdType>;

            if (entity != null)
            {
                return uniqueId.Equals(entity.Id);
            }
        }

        return base.Equals(obj);
    }

    public override int GetHashCode()
    {
        return uniqueId.GetHashCode();
    }
}

Frage:

Würden Sie dies als eine gute Alternative zum Generieren von Guid-Werten bei der Instanzerstellung betrachten?Gibt es bessere Lösungen für dieses Problem?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage