0

我继承了一个有趣的 ASP 页。该页面向用户呈现各种报告。报告类型由用户在加载报告页面之前从左侧菜单中选择。报告页面使用一组相对较小的屏幕元素来向用户查询报告参数,例如报告的开始和结束日期,但有大约 20 种不同的报告。每个报告决定显示哪些元素,然后在请求时在后端生成报告并在修改后的 GridView 中显示报告以显示特定报告。

其实它的结构还不错。问题是支持代码文件现在大约有 4000 行代码。其中大部分是 switch 或 if then else 语句询问它是哪种报告类型,然后处理特定报告的特殊情况。

我想做的是将每个报告推送到它自己的类文件中,从基础报告页面类继承并根据需要实现自己的特定更改。然后在页面加载期间选择适当的类(我们知道这一点,因为加载页面的菜单选择选择报告类型)作为支持代码。

关于如何实现这一点的想法?

4

1 回答 1

1

部分类是最简单的方法,因为您可以移动代码但它仍然都在同一个类中,因此范围不受影响。

重构为单独的类可能是一个更好的主意,但现在听起来您的代码与 aspx 页面紧密耦合——这是您应该同时更改的内容。即使您所有的新类所做的只是返回一个DataTable绑定到 GridView 的。

我可能会尝试这样的结构:

aspx -- 收集用户输入的代码,然后实例化正确的报告类和数据绑定。

switch(this.ddlReportType.SelectedItem)
{
    case ReportType.UserActivity:
        var uar = new UserActivityReport(this.StartDate, this.EndDate, this.PageSize);
        this.GridView1.DataSource = uar.GetReport();
        break;
}

至于重构您的报告代码,我建议您从简单开始,为每个报告创建一个类。然后随着时间的推移,开始削减公共元素并将它们重构为基类。如果有一些非常明显且易于组合的通用元素,请立即在基类中启动它们,但我会专注于将每个报告放入自己的类中,因为从您的描述来看,它们听起来足够复杂,可以保证.

于 2012-08-10T16:36:17.033 回答