L'ignorance de la persistance est une application du principe de responsabilité unique, ce qui signifie en pratique que les objets de domaine ( DO ) ne doivent pas contenir de code lié à la persistance, ils doivent uniquement contenir une logique de domaine.
a) Je suppose que cela signifie que le code qui contacte les couches inférieures (c'est-à-dire les couches de persistance) vit en dehors du modèle de domaine dans d'autres classes ( OC ) d'une couche de logique métier?
b) Si mon hypothèse sous a) est correcte, alors DO , disons Customer
, ne contient jamais de méthodes telles que GetCustomers
ou GetCustomerByID
?
c) Si mes hypothèses sous a) et b) sont correctes, et en supposant que l' Customer
objet de domaine utilise le chargement paresseux pour certaines de ses propriétés, alors à un moment donné Customer
, la logique interne doit contacter OC , qui à son tour récupère les données différées. Mais si vous devez Customer
contacter OC pour recevoir des données différées, alors nous ne pouvons pas vraiment affirmer que les objets de domaine ne contiennent pas de logique liée à la persistance?!
Je vous remercie
RÉPONDRE À jkohlhepp
1) Je suppose OrderProvider
que les CustomerProvider
classes sont contenues dans la couche logique métier?
2) Je comprends de votre réponse que mes hypothèses sous b) sont correctes?
3)
... Je vérifierais si un champ de commandes privées a été rempli ou s'il était nul. S'il est nul ...
Mais pour autant que je sache, dès que le code de domaine doit vérifier si le order
champ privé a été rempli, et si ce n'est pas le cas, en contactant OrderProvider, nous violons déjà le principe PI ?!
Vous avez juste une classe de câblage qui remplit les objets du domaine (par exemple, quelque chose appelé "référentiel"). Vous pouvez implémenter le chargement paresseux ou tout type de schéma de cohérence de cache que vous souhaitez et les objets de domaine ne sont pas plus sages. Vous séparez la responsabilité de remplir les objets de domaine des objets de domaine.
la source