WPF如果帮助程序类不好,您如何正确消除重复的代码?

时间:2013-08-26 01:20:21

标签: c# static static-classes

所以今晚我花了一个晚上来阅读帮助班,并且有很多人建议避免帮助班。我喜欢这个人的残忍:http://simpleprogrammer.com/2010/04/12/should-i-leave-that-helper-class/。这让我问自己,如果没有辅助课那么还有什么呢?

所以在我的WPF应用程序中我有3页。在每个页面上我都有Label,我使用这种方法来制作动画:

    public static void SetUpAnimation()
    {
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = -nameLabel.ActualWidth;
        doubleAnimation.To = nameCanvas.ActualWidth;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.Parse("0:0:10"));
        nameLabel.BeginAnimation(Canvas.RightProperty, doubleAnimation);
    }

所以现在我创建了静态类LabelAnimator并将此方法放上,一切正常。但是当我添加更多与此动画师无关的代码时会发生什么,我也会在其他页面中使用它。例如,更新该标签的Timer。代码是相同的,这意味着我将复制粘贴到每个WPF页面(类)上。

通过这种方法,我将不得不制作另一个类似LabelTimer的帮助器类。这意味着我将拥有2个类,每个方法有1个方法。我不知道这有多少浪费,但更让我担心的是这个好的方法,有没有比为这样的每个方法做辅助类更好的方法?

但这只是一个例子,不要告诉我该怎么做才能使用这个功能,但是对于任何类之间重复的方法都是全局的。

正如我在这里读到的那样:https://softwareengineering.stackexchange.com/questions/107458/how-to-remove-duplicate-code-in-general在同一层次结构的类中消除重复代码的正确方法是提取方法并将其拉出,据我所知是我的事情我在做。将该方法放入辅助类。

但这样好吗?有10个不同的帮助器类(如果你不想将所有方法放在一个辅助类中,并使它非常混乱)是消除同一类层次结构上重复方法的唯一选择吗?

回到过去的日子里,当我还是小孩的时候,我总是担心程序会起作用,既然我是个大孩子,我必须考虑这样的事情。但我喜欢编码,因为这样的事情;)

感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

它可以防止代码重复使用,并且只会帮助代码的一部分,在这种情况下,您甚至不需要新的代码。

您可以将额外的代码放在您正在调用的类之外​​。

答案 1 :(得分:0)

“拉起来”并不总是意味着创建一个静态助手类,关于上面的示例,您可以为包含相同动画的3个页面创建一个基类(但实际上它只属于Xaml)

public LabelPage : Page
{
    public virtual void SetUpAnimation()
    {
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = -nameLabel.ActualWidth;
        doubleAnimation.To = nameCanvas.ActualWidth;
        doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
        doubleAnimation.Duration = new Duration(TimeSpan.Parse("0:0:10"));
        nameLabel.BeginAnimation(Canvas.RightProperty, doubleAnimation);
    }
}

如果您需要添加/更改动画,可以在课程中覆盖

public Page1 : LabelPage
{
    public override void SetUpAnimation()
    {
       base.SetUpAnimation();

       // more stuff to do;
    }
}

IMO帮助类没有任何问题,只要它们没有被滥用,我个人觉得过度使用扩展方法来做帮助的东西更像是一个问题然后固定类