Pour un modèle de données propre, je vais revenir en arrière sur ce ...Meilleures pratiques d'infrastructure: quelle couche doit appeler SaveChanges()?
L'utilisation d'un flux de travail d'approbation à titre d'exemple, disons que dans mon application web, j'ai une page qui permet un drapeau utilisateur un MyEntityObject
pour approbation. MyEntityObject
a quelques propriétés qui contrôlent son flux de travail d'approbation, donc j'ai une méthode utilitaire commune là-bas appelée FlagForApproval(MyEntityObject eo)
.
Si la la page appel FlagForApproval() pour définir les propriétés nécessaires ne puis appelez SaveChanges() quand il est prêt, ou devrait FlagForApproval() enregistrer les modifications? Avoir la méthode utilitaire enregistrer les changements semble faire un peu plus que ce qu'on lui demande de faire (et si c'était juste une étape dans une série d'opérations?), Mais en même temps, faire appel à la page SaveChanges () et valider les données dans la base de données semble être trop proche des responsabilités de la couche de données.
pensées?
(Mise à jour: FWIW, jusqu'à présent, j'ai eu des méthodes utilitaires appel SaveChanges(), de cette façon la page ne dispose que d'une série d'exceptions à gérer, si la validation ou de données.)
Je pense que vous êtes 100% à droite - il est très propre de garder SaveChanges à BLL et laisser décider d'effectuer ou non enregistrer. Mais je peux voir au moins 2 situations, où une exception peut être faite: 1) Le projet nécessite une validation du côté du modèle - ce n'est pas BLL, mais il doit décider si les changements doivent être sauvegardés ou non. 2) SaveChanges est exécuté après un code vraiment simple (ajout d'une entité, mise à jour des propriétés uniques d'une entité existante). Dans mon cas ce serait DAL. Donc je suppose que la meilleure solution est de suivre votre instinct et/ou votre expérience. –