我遇到了一些设计问题,而且似乎总是遇到各种相同的问题。虽然我意识到存在设计问题,但我不能说问题是什么,也不能说我该如何纠正它。
我特别遇到的一个问题是在抽象 DAO 访问的代码中。我喜欢这个想法,因为我可以转移到影响最小的基于服务的数据检索(我相信)。并且可以通过现有方法添加和访问更多报告。
此外,由于每个报告都包含自己的一组列,我不知道允许 GridView 加载它们的方法(由于接口为空,我发布的代码无法运行)。
我的目标是能够从列表中选择“报告”,然后根据报告填充网格视图。
public void LoadReportFor(string reportName)
{
GridView1.DataSource = RetrieveReportDataFor(reportName, DateTime.Now);
GridView1.DataBind();
}
private List<IReportRecord> RetrieveReportDataFor(string reportName, DateTime date)
{
List<IReportRecord> records;
switch (reportName)
{
case "Timesheet":
records = reportSDAO.GetTimeSheetReport(date);
break;
case "Salary":
records = reportsDAO.GetSalaryReport(date);
break;
default:
records = new List<IReportRecord>();
}
return records;
}
public class TimeSheetRecord : IReportRecord
{
public string DayOfWeek { get; set; }
public int EmpID { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public double HoursWorked { get; set; }
}
public class SalaryRecord : IReportRecord
{
public int EmpID { get; set; }
public double Salary { get; set; }
}
public interface IReportRecord
{
}
}
更新。
我决定合并 LoadReportFor 和 RetrieveReportDataFor 方法。在给我的麻烦一些想法之后,我没有理由有两种方法。