2010-12-07 9 views
0

여러 클래스 파일에서 공통적으로 발생하는 코드를 작성할 때 필자는이를 도우미 파일에 배치하는 경향이 있습니다.도우미 클래스 및 단위 테스트

헬퍼 또는 유틸리티 클래스를 필요한 클래스에 삽입해야합니까? 또는 단순히 "작곡"에 대한 참조가 필요하십니까?

감사합니다.

답변

0

정적 클래스 인 유틸리티 클래스로 만드는 것이 좋습니다.

종속성은 특정 클래스와 밀접한 관련이 있지만 시나리오에서는 유틸리티 클래스가 필요하다고합니다.

+0

유틸리티와 도우미의 가장 큰 차이점은 무엇입니까? – Bill

+0

비교 점은 없지만 대부분 유틸리티 클래스는 정적 클래스이므로 유틸리티 클래스에서 서브 클래 싱 할 필요가 없습니다. – TalentTuner

0

나는 당신이 약간 다른 방식으로 똑같은 일을하는 여러 가지 헬퍼 클래스를 돕지 않는다면 주입의 정교함을 필요로하지 않는다고 말하고 싶습니다. 저는 작곡이 합리적이라고 말하고 싶습니다. 당신은 대안으로 유틸리티 나 툴킷 정적 클래스를 만들 수 있습니다. 그러면 코드가 좀 더 명확해질 수 있습니다.

2

Composition vs Inheritance를 선택해야하는 이유는 잘 알려진 SOLID 원칙이어야합니다. 그렇다면 "상속에 대한 선호"는 IMO의 결과입니다.

  • 가 정적 인 경우 (Saurabh 말했듯이)

    는 IMO 당신은 유틸리티 클래스가;

  • 작업은 특정 도메인과 관련이 없지만 원시 데이터와 관련됩니다 (예 : 목록을 반전하는 유틸리티).
  • 그 기능은 부작용이 없습니다.
  • 해당 기능의 대체 구현이 없습니다.

어쨌든 C# 확장을 사용하면 유틸리티 클래스를 만드는 것이 거의 없습니다.

유틸리티 클래스를 사용하면 주입 할 필요가 없습니다 (정적이며 테스트 할 수 있음). 대신에 컴포지션을 사용하는 경우 종속성 반전 원리에 따르면 "추상화가 아닌 concretions"에 의존해야하므로 컨테이너에서 추상화를 주입 할 수 있습니다.

+0

제 경우에는 일부 메소드가 클래스의 일부일 수 있습니다. 그러나 2 또는 3 개의 클래스에는 동일한 메소드가 필요하며 모든 클래스는 동일한 도메인에 있습니다. 이 경우 정적 메서드를 사용한 유틸리티가 더 낫습니다. C# 확장은 위의 경우보다 일반 용도의 메서드에 더 적합하다고 생각합니다. – Bill

+0

예, 그 방법이 일반적인 목적이 아니라면 유틸리티 클래스를 사용하지 않고 클래스의 메소드를 캡슐화합니다. – onof

+1

동일한 방법을 3 개의 클래스에 복사 하시겠습니까? – Bill

관련 문제