我怎么能重构我的Windows手机应用程序的这一部分

时间:2011-11-30 23:27:45

标签: c# oop windows-phone-7 refactoring

我对重构不是很熟悉,但我觉得我需要在这段代码中做一些修改......

我的应用程序中有4个按钮。每个人调用一个从在线xml接收数据的方法,并使用此数据填充列表框。

我一直在为所有这些方法重复代码,尽管我看到它们有时会有所不同。

这是我的逻辑的一点解释:
按钮btnA_Click和btnB_Click获取相同的数据,但来自不同年份。
其他2个按钮也是如此。他们获得相同的数据(与btnA不同) 和btnB)但也来自不同的年份。

按钮:

private void btnA_Click(object sender, RoutedEventArgs e)
    {
        string webService = @"xml from the web";
        table.OpenReadAsync(new Uri(webService));
        btnA.IsEnabled = false;
        btnB.IsEnabled = false;
        progressBar1.Visibility = System.Windows.Visibility.Visible;
    }

private void btnB_Click(object sender, RoutedEventArgs e)
    {
        string webService = @"xml from the net";
        table.OpenReadAsync(new Uri(webService));
        btnA.IsEnabled = false;
        btnB.IsEnabled = false;
        progressBar1.Visibility = System.Windows.Visibility.Visible;
    }

private void btnSTA_Click(object sender, RoutedEventArgs e)
    {
        string webService = @"xml from the web;
        stats.OpenReadAsync(new Uri(webService));
        btnSTA.IsEnabled = false;
        btnSTB.IsEnabled = false;
        progressBar3.Visibility = System.Windows.Visibility.Visible;
    }

private void btnSTB_Click(object sender, RoutedEventArgs e)
    {
        string webService = @"xml from the web;
        stats.OpenReadAsync(new Uri(webService));
        btnSTA.IsEnabled = false;
        btnSTB.IsEnabled = false;
        progressBar3.Visibility = System.Windows.Visibility.Visible;
    }


方法:

void table_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        if (e.Error == null && !e.Cancelled)
        {
            XElement xml = XElement.Load(e.Result);
            var table = LINQ Statement...
            listBox1.ItemsSource = table;
            btnClassificacaoSerieA.IsEnabled = true;
            btnClassificacaoSerieB.IsEnabled = true;
            progressBar1.Visibility = System.Windows.Visibility.Collapsed;
        }
    }

void stats_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        if (e.Error == null && !e.Cancelled)
        {
            XElement xml = XElement.Load(e.Result);
            var stats = LINQ Statement...
            listBox3.ItemsSource = stats;
            btnSTA.IsEnabled = true;
            btnSTB.IsEnabled = true;
            progressBar3.Visibility = System.Windows.Visibility.Collapsed;
        }
    }

我有点迷失在这里。我该怎么做才能使这个代码更加面向对象?
THX!

1 个答案:

答案 0 :(得分:0)

您的点击事件似乎大致相同...创建一个执行该操作的子服务并从click事件中调用sub。看看你是否可以在参数上加以区别。

此外,隐藏/显示进度条和启用/禁用按钮的代码几乎相同。那些带有参数的东西,可以让你说出你想要隐藏还是显示。