Domain Model Saving
-
22-08-2019 - |
Frage
Vor kurzem Eric Evans Domain Driven Design zu Ende gelesen (sehr informativ, sehr angenehm) jedoch kommt erstes großes Projekt, da das Buch abgeschlossen und bekam die Frage, wie das Domain-Modell in der Handhabung?
Ich schätze die Nutzung von Diensten / Repositories und wie sie das Modell helfen können, aber wie würden sie behandeln das Modell speichern?
Mein bisheriges Domain-Modell speichert der folgende Methode Aufrufstruktur folgen würde;
ParentClass.Save {
ParentClassDB.Save
ChildObject1.Save
ChildObject1DB.Save
ChildObject2.Save
ChildObject2DB.Save
etc etc
}
wird die Dienst der Kontrolle über die sachgemäßen speichern Routinen auf den untergeordneten Objekten aufrufe?
Lösung
In DDD, wird die Domain-Einheit nicht kümmert ihre Ausdauer. Sie sollten keine Save()
Methode auf sie haben, im Idealfall.
Ihr Repository wird ein solches Save
Verfahren haben, das dauert eine Einheit Instanz in Parameter:
public class PersonRepository
{
//...
public void Save(Person person)
{
this.dataContext.Save(person);
}
//...
}
Je nach Stapel, ein ORM wird das Objekt Spar behandeln, oder Sie werden durch die Erstellung eine Abfrage zu beenden, die Person zu speichern, oder Sie werden Parameter für gespeicherte Prozeduren füllen mit von der Instanz Werten, etc.
Wenn ich das richtig verstanden, was Sie getan haben, kann es notwendig sein, die Persistenzlogik zu bewegen, die Sie in den Domain-Entitäten an anderer Stelle gesetzt, wahrscheinlich in Repositories oder in der DAL von Ihrem Repositorys verwendet.
Andere Tipps
Verwenden Sie Aggregate Wurzeln? Sie sind responsilbe für ihre Einrichtungen zu speichern.
Wenn es viele Änderungen sind auf eine Art und Weise gehen könnte diese Logik in einer Domäne Dienst zu kapseln und haben den Service handhaben das spart durch die Aggregate Wurzeln.