У нас є шар даних, який обертає Linq в SQL. У цьому шарі даних у нас є цей метод (спрощений)
int InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
return report.ID;
}
Після подання змін ідентифікатор звіту оновлюється значенням у базі даних, яку ми потім повертаємо.
З боку виклику це виглядає так (спрощено)
var report = new Report();
DataLayer.InsertReport(report);
// Do something with report.ID
Дивлячись на код, ID встановлюється всередині функції InsertReport як певний побічний ефект, і тоді ми ігноруємо повернене значення.
Моє запитання: чи варто покладатися на побічний ефект і робити щось подібне замість цього.
void InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
}
чи ми повинні цьому запобігати
int InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport.ID;
}
можливо, навіть
Report InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport;
}
Це питання виникло, коли ми створили одиничний тест і виявили, що не зовсім зрозуміло, що властивість ідентифікаторів параметрів звіту оновлюється і що для знущань над поведінкою побічного ефекту почувалося неправильним, якщо ви захочете кодом.