2013-08-26 3 views
1

오늘 밤 나는 도우미 수업을 읽으려고 밤을 보냈고 도우미 수업을 피하기 위해 많은 사람들이 조언을했습니다. 나는이 녀석의 잔인 함을 사랑했다 : http://simpleprogrammer.com/2010/04/12/should-i-leave-that-helper-class/. 그래서 나 자신에게 물어 보았다. 그러면 도우미 클래스가 아니라면 무엇이 있을까?WPF 헬퍼 클래스가 잘못된 경우 중복 코드를 어떻게 적절히 제거합니까?

그래서 내 WPF 응용 프로그램에는 3 페이지가 있습니다. 각 페이지에서 내가 라벨을 가지고 있고 그것을 애니메이션의 목적을 위해이 방법을 사용 :

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을 생성하고이 방법을 올려, 모든 것이 괜찮습니다. 그러나이 애니메이터와 관련이없는 코드를 더 추가하면 어떻게됩니까? 다른 페이지에서도이 코드를 사용합니다. 예를 들어, 그 라벨을 갱신하는 타이머. 코드는 동일하므로 각 WPF 페이지 (클래스)에 붙여 넣기를 복사합니다. 이 방법으로

나는 LabelTimer 같은 다른 헬퍼 클래스를 만들 것이다. 즉, 각각 1 개의 메소드로 2 개의 클래스를 가질 수 있다는 것을 의미합니다. 얼마나 많은 낭비인지 모르겠지만,이 모든 것이 괜찮은 접근입니다. 이처럼 각 메소드의 도우미 클래스를 수행하는 것보다 더 좋은 방법이 있습니까?

하지만 그건 그냥 예입니다, 내가 클래스 사이의 중복 어떤 방법이 기능을 수행하지만, 글로벌해야하는지 말해주지 않습니다.

여기 읽으면서

: https://softwareengineering.stackexchange.com/questions/107458/how-to-remove-duplicate-code-in-general 동일한 계층 구조의 클래스에서 중복 코드를 제거하는 적절한 방법은 방법을 추출하고 내가 일을하고있는 것입니다 이해을 당겨 올려하는 것입니다. 메소드를 도우미 클래스에 두는 것.

하지만 좋은가요? 10 개의 다른 도우미 클래스가있는 경우 (모든 도우미를 하나의 도우미 클래스에 넣고 싶지 않고 매우 혼란스럽게 만드는 경우) 동일한 클래스 계층 구조에서 중복 메서드를 제거하는 유일한 방법은 무엇입니까? 나는 작은 아이 였을 때

돌아 가기 일, 나는 프로그램은 지금은 내가 이런 것들에 대해 생각해야 큰 아이 오전, 작동 항상 걱정하고있다. 하지만 이런 식으로 코딩하는 것을 좋아합니다.)

고마워.

답변

0

그것은 재사용되는 것을 코드를 방지하고 해당 경우에 당신도 새로운 클래스를 필요로하지 않는 코드의 한 부분 도움이 될 것입니다.

호출하려는 클래스 외부에 여분의 코드를 넣을 수 있습니다.

+0

"당신은 당신이 호출하는 클래스의 외부에서 추가 코드를 넣을 수 있습니다."다음 고체 클래스 문제의 방법이 더있다 - 예를 들어 주시겠습니까? –

+0

Like'SetUpAnimation(); // 애니메이터에 연결되어 있지 않은 코드', 그렇지 않으면'SetUpAnimation();'은 더 이상 애니메이션을 설정하지 않습니다. – ismellike

0

항상 정적 도우미 클래스를 만들 의미 같은 애니메이션이 포함 (그러나 정말이는 XAML에 속함) 귀하의 3 페이지 이리저리 기본 클래스를 만들 수 있습니다 위의 당신에게 예에 관한하지 않습니다 "를 끌어"

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 개인적으로의 오버 사용을 찾을만큼 그들이 학대되지 않는 한 도우미 클래스 아무 문제가 없다 확장 메타 ODS 도우미 물건을 할

+0

이것이 정상 도우미 클래스와 다른 점은 무엇입니까? 어떤 사용 예가 있습니까? –

+0

예를 들어, 도우미 클래스가 아닌 기본 클래스 –

+0

이 목적으로 새 Page 하위 클래스를 만드는 것을 좋아하지 않습니다. 정적이 아닌 LabelAnimator 클래스가 더 좋을 것입니다. 상속보다 컴포지션을 선호하십시오. – efdee