2010-11-11 2 views

Répondre

2

Je n'aime pas l'idée d'avoir des dépôts validant les modifications de la base de données.

Dans mon cas, xRepository.Add (x) attache uniquement l'entité/AR à l'unité de travail actuelle.

Pour effectuer la validation réelle sur db, j'appelle commit sur mon site.

par ex.

C#

using(var uow = UoW.Begin() 
{ 
    var ar1Repo = new Ar1Repository(uow); 
    var ar1 = ar1Repo.FindById(123); //fetch already persistent entity 

    var ar1.MakeChangesToAr2(); 

    //both ar1 and ar2 are persistent and known by the UoW 
    //so no need to add them to the repositories since they 
    //are already _in_ the repositories   

    uow.Commit(); 
} 

ou:

using(var uow = UoW.Begin() 
{ 
    var ar1Repo = new Ar1Repository(uow); 
    var ar2Repo = new Ar2Repository(uow); 
    var ar2 = new AR2(); 
    var ar1 = new AR1(AR2); 
    ar1.MakeChangesToAr2(); 

    //attach the new entities to the uow 
    ar1Repo.Add(ar1); 
    ar2Repo.Add(ar2); 

    uow.Commit(); 
} 

De cette façon, vous pouvez commettre des lots entiers de changements à la fois, au lieu d'essayer de faire commits atomiques par entité où vous pourriez avoir des problèmes commis objet graphiques.

Cette idée est basée sur les idées de Jimmy Nilssons dans son livre Appliquant Domain Driven Design et patterns.

+0

De grands points Roger, mais je ne pense pas que cela réponde à la question principale qui est de savoir s'il est acceptable d'avoir une méthode d'appel Entity sur le référentiel. Je pense que le consensus général est "non, n'autorise pas les entités à appeler les méthodes du référentiel" car c'est une rupture indirecte de l'ignorance de la persistance et rend le test plus difficile. – jpierson

-1

Je voudrais avoir une méthode dans AR2 nommée Save(). Cette méthode instancie le référentiel pour qu'il se sauvegarde lui-même. AR1 peut alors appeler la méthode Save() sur AR2 une fois qu'il a effectué la modification.

+0

Est-ce vraiment le chemin à parcourir? Cela ne sonne pas comme sa partie du domaine. Et les entités ne devraient pas savoir qu'elles sont persistées? –

+0

Cela ressemblerait plus à Active Record qu'à true DDD –

Questions connexes