Linq To SQL'i saran bir veri katmanımız var. Bu veri katmanında bu yöntem var (basitleştirilmiş)
int InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
return report.ID;
}
Gönderme değişikliklerinde, rapor kimliği daha sonra döndürdüğümüz veritabanındaki değerle güncellenir.
Arayan taraftan böyle görünüyor (basitleştirilmiş)
var report = new Report();
DataLayer.InsertReport(report);
// Do something with report.ID
Koda bakıldığında ID, InsertReport işlevinin içinde bir tür yan etki olarak ayarlandı ve sonra dönüş değerini yok sayıyoruz.
Sorum şu, yan etkiye güvenmeli ve bunun gibi bir şey yapmalıyım.
void InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
}
ya da bunu engellemeliyiz
int InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport.ID;
}
hatta belki
Report InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport;
}
Bu soru, bir birim testi oluşturduğumuzda ve rapor parametreleri ID özelliğinin güncellendiğini ve yan etki davranışını alay etmenin yanlış hissettiğini, eğer isterseniz bir kod kokusunun gerçekten net olmadığını tespit ettiğimizde ortaya çıktı.