我该如何重构我的windows手机应用程序的这一部分?

本文关键字:应用程序 手机 windows 一部分 我的 何重构 重构 | 更新日期: 2023-09-27 18:16:21

我不太熟悉重构,但我觉得我需要在这段代码中做一些改变…

我有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;
        }
    }

我有点迷路了。我能做些什么使这段代码更面向对象?
谢谢!

我该如何重构我的windows手机应用程序的这一部分?

你的点击事件似乎大多是相同的…创建一个做这些事情的sub并从click事件中调用这个sub。看看你是否可以在参数中添加任何不同。

隐藏/显示进度条和启用/禁用按钮的代码也几乎相同。把它放到一个带有参数的子元素中让你知道是隐藏还是显示