เรามีชั้นข้อมูลที่ล้อมรอบ 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;
}
คำถามนี้เกิดขึ้นเมื่อเราสร้างการทดสอบหน่วยและพบว่ามันไม่ชัดเจนจริง ๆ ว่าคุณสมบัติ ID พารามิเตอร์ของรายงานได้รับการอัปเดตและเพื่อเลียนแบบพฤติกรรมผลข้างเคียงที่เกิดขึ้นรู้สึกผิดรหัสกลิ่นถ้าคุณจะ