2009-03-25 9 views
4

A récemment terminé la lecture Eric Evans Domain Driven Design (très instructif, très agréable) mais vient au premier projet majeur depuis la fin du livre et a obtenu le problème comment gérer le modèle de domaine sauver?Domain Model Saving

J'apprécie l'utilisation de services/référentiels et comment ils peuvent aider le modèle, mais comment pourraient-ils gérer la sauvegarde du modèle?

Mes sauvegardes de modèle de domaine précédent suivraient la structure d'appel de méthode suivante;

ParentClass.Save {

ParentClassDB.Save

ChildObject1.Save

 ChildObject1DB.Save 

ChildObject2.Save

 ChildObject2DB.Save 
    etc etc 

}

Le service prend-il le contrôle de l'appel des routines de sauvegarde appropriées sur les objets enfants?

Répondre

6

En DDD, l'entité de domaine ne prend pas en compte sa persistance. Vous ne devriez pas avoir une méthode Save() là-dessus, idéalement.

Votre dépôt aura une telle méthode Save, qui prend une instance d'entité paramètre:

public class PersonRepository 
{ 
    //... 

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

    //... 
} 

En fonction de votre pile, un ORM va gérer l'économie d'objet, ou vous finirez par la construction d'une requête enregistrer la personne, ou vous allez remplir les paramètres de procédure stockée avec vos valeurs d'instance, etc.

Si j'ai bien compris ce que vous avez fait, il peut être nécessaire de déplacer la logique de persistance que vous avez placée dans les entités de domaine ailleurs, probablement dans référentiels ou dans la DAL utilisée par vos référentiels.

+0

D'accord, mais d'où la méthode PersonRepository.Save est-elle appelée? Directement à partir de l'application? A partir d'une classe "Service" dans l'assembly de domaine, qui est ensuite appelée depuis l'application? –

1

Utilisez-vous des racines agrégées? Ils sont responsables de sauver leurs entités. Si d'innombrables modifications sont possibles, il est possible d'encapsuler cette logique dans un service de domaine et de permettre au service de gérer les sauvegardes via les racines agrégées.