Linq To SQL을 래핑하는 데이터 계층이 있습니다. 이 데이터 레이어에는이 방법이 있습니다 (간체 화됨)
int InsertReport(Report report)
{
db.Reports.InsertOnSubmit(report);
db.SubmitChanges();
return report.ID;
}
제출 변경 사항이 있으면 보고서 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;
}
이 질문은 단위 테스트를 만들 때 발생했으며 보고서 매개 변수 ID 속성이 업데이트되고 부작용 동작을 조롱하는 것이 잘못되었다는 사실이 명확하지 않다는 것을 알았습니다.