हमारे पास एक डेटा लेयर है जो Linq To 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
कोड को देखते हुए, InsertReport फ़ंक्शन के अंदर एक प्रकार के साइड इफेक्ट के रूप में ID सेट किया गया है, और फिर हम रिटर्न वैल्यू को अनदेखा कर रहे हैं।
मेरा सवाल यह है कि क्या मुझे साइड इफेक्ट पर भरोसा करना चाहिए और इसके बजाय ऐसा कुछ करना चाहिए।
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;
}
यह सवाल तब उठाया गया जब हमने एक यूनिट टेस्ट बनाया और पाया कि इसकी वास्तव में यह स्पष्ट नहीं है कि रिपोर्ट पैरामीटर आईडी प्रॉपर्टी अपडेट हो जाती है और यह कि साइड इफेक्ट के व्यवहार को गलत महसूस करने के लिए, आपको लगता है कि एक कोड गंध।