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?

War es hilfreich?

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.

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