我继承了一个有趣的ASP页面。该页面向用户显示各种报告。在加载报表页面之前,用户从左侧菜单中选择报表类型。报告页面使用一组相对较小的屏幕元素来查询用户的报告参数,例如报告的开始和结束日期,但有大约20种不同的报告。每个报告决定显示哪些元素,然后在请求时在后端生成报告,并在GridView中显示报告以修改特定报告。
实际上结构并不算太糟糕。问题是支持代码文件现在是~4000行代码。其中很大一部分是切换或者是否有其他语句询问它是哪种报告类型,然后处理特定报告的特殊情况。
我想要做的是将每个报告推送到自己的类文件中,继承自基本报告页面类并根据需要实现自己的特定更改。然后在页面加载期间选择适当的类(我们知道这个,因为加载页面的菜单选择选择报告类型)作为支持代码。
关于如何实现这一目标的想法?
答案 0 :(得分:1)
部分类是简单的路径,因为您可以移动代码,但它仍然在同一个类中,因此范围不受影响。
重构成单独的类可能是一个更好的主意,但现在听起来就像你的代码紧密耦合到aspx页面 - 这是你应该同时改变的。即使你的所有新类都返回了一个绑定到GridView的DataTable
。
我可能会尝试这样的结构:
aspx - 用于从用户收集输入,然后实例化正确的报告类和数据绑定的代码。
switch(this.ddlReportType.SelectedItem)
{
case ReportType.UserActivity:
var uar = new UserActivityReport(this.StartDate, this.EndDate, this.PageSize);
this.GridView1.DataSource = uar.GetReport();
break;
}
至于重构您的报告代码,我建议您从简单开始,为每个报告创建一个类。然后随着时间的推移,开始削减共同元素并将它们重构为基类。如果有一些非常明显且易于组合的公共元素,请立即在基类中启动它们,但我会专注于将每个报告放入自己的类中,因为根据您的描述,它听起来很复杂,足以保证它