Nous avons une couche de données qui enveloppe Linq To SQL. Dans cette couche de données, nous avons cette méthode (simplifiée)
int InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
return report.ID;
}
Lors de la soumission des modifications, l'ID du rapport est mis à jour avec la valeur dans la base de données que nous renvoyons ensuite.
Du côté appelant, cela ressemble à ceci (simplifié)
var report = new Report();
DataLayer.InsertReport(report);
// Do something with report.ID
En regardant le code, l'ID a été défini dans la fonction InsertReport comme une sorte d'effet secondaire, puis nous ignorons la valeur de retour.
Ma question est, devrais-je compter sur l'effet secondaire et faire quelque chose comme ça à la place.
void InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
}
ou devons-nous l'empêcher
int InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport.ID;
}
peut-être même
Report InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport;
}
Cette question a été soulevée lorsque nous avons créé un test unitaire et constaté qu'il n'était pas vraiment clair que la propriété ID des paramètres du rapport était mise à jour et que pour se moquer du comportement des effets secondaires, une odeur de code si vous voulez.