Domanda

Di recente finito di leggere design Eric Evans Domain Driven (molto istruttiva, molto piacevole), tuttavia venire a primo grande progetto da quando ha completato il libro ed ha ottenuto il problema come gestire il modello di dominio salvare?

Apprezzo l'utilizzo di servizi / repository e come possono aiutare il modello, ma come avrebbero gestire il modello di salvataggio?

Il mio precedente modello di dominio salva seguirebbe la seguente struttura chiamata di metodo;

ParentClass.Save {

ParentClassDB.Save

ChildObject1.Save

       ChildObject1DB.Save

ChildObject2.Save

       ChildObject2DB.Save  
  etc etc 

}

Fa il controllo servizio take di chiamare l'appropriata Salva routine sugli oggetti figlio?

È stato utile?

Soluzione

Nel DDD, l'entità del dominio non prendersi cura della sua persistenza. Non si dovrebbe avere un metodo Save() su di esso, in posizione ideale.

Il repository avrà un tale metodo Save, che prende un'istanza entità parametro:

public class PersonRepository
{
   //...

   public void Save(Person person)
   {
      this.dataContext.Save(person);
   }

   //...
}

A seconda del tuo stack, un ORM gestirà il risparmio oggetto, o si finirà con la costruzione di una query per salvare la persona, oppure si popolerà con i parametri di stored procedure dai vostri valori di istanza, ecc.

Se ho capito bene quello che hai fatto, può essere necessario spostare la logica di persistenza si mette nelle entità del dominio altrove, probabilmente nel repository, oppure nel DAL utilizzato dai repository.

Altri suggerimenti

Non si utilizza radici di aggregazione? Sono responsilbe per salvare le loro entità.

Se c'è un sacco di modifiche in corso un modo potrebbe essere quello di incapsulare la logica in un servizio di dominio e avere il servizio gestire la salva attraverso le radici di aggregazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top