Chúng tôi có một lớp dữ liệu bao bọc Linq To SQL. Trong datalayer này, chúng ta có phương thức này (đơn giản hóa)
int InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
return report.ID;
}
Khi gửi thay đổi, ID báo cáo được cập nhật với giá trị trong cơ sở dữ liệu mà sau đó chúng tôi trả lại.
Từ phía gọi, nó trông như thế này (đơn giản hóa)
var report = new Report();
DataLayer.InsertReport(report);
// Do something with report.ID
Nhìn vào mã, ID đã được đặt bên trong hàm insertReport dưới dạng một loại hiệu ứng phụ, và sau đó chúng ta bỏ qua giá trị trả về.
Câu hỏi của tôi là, tôi có nên dựa vào tác dụng phụ và làm một cái gì đó như thế này thay thế.
void InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
}
hoặc chúng ta nên ngăn chặn nó
int InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport.ID;
}
thậm chí có thể
Report InsertReport(Report report)
{
var newReport = report.Clone();
db.Reports.InsertOnSubmit(newReport);
db.SubmitChanges();
return newReport;
}
Câu hỏi này được đặt ra khi chúng tôi tạo một bài kiểm tra đơn vị và thấy rằng nó không thực sự rõ ràng rằng thuộc tính ID tham số báo cáo được cập nhật và để chế giễu hành vi tác dụng phụ cảm thấy sai, bạn sẽ ngửi thấy mùi mã.