2011-09-05 5 views
4

다음 문제에 대한 최선의 방법을 찾고 있습니다.정적 도우미 클래스 대 인스턴스 클래스의 정적 메서드 대 확장 메서드

나는 사람들의 의견을 싶습니다 다음과 같은 경우에, 어떤 방법 (들) 그들이 사용하는 것, 그리고 왜에있다 :

나는 날짜 시간이 지정된 경우 공장 인스턴스화하는 Class 있어요.

어떤 방법을 사용해야합니까?

정적 "도우미"클래스 : 인스턴스 유형에 Class c = ClassHelper.GetClass(DateTime);
정적 방법 : Class c = Class.GetClass(DateTime);
정적 확장 클래스/메소드 : 나는 적이 없기 때문에 Class c = DateTime.GetClass();

은 현재 내가 정적 도우미 클래스쪽으로 더 기울고 있어요 이전에 인스턴스 클래스에서 정적 팩토리 메서드를 사용하는 방법을 사용 했었지만 클래스의 정적 메서드로이 메서드를 사용하는 것이 좋습니다.

단위 테스트 또는 구성 테스트와 관련하여 고려해야 할 사항이 있습니까?

확장 메서드를 사용하는 것이 현명하지 않은데, 확장하는 메서드를 사용해야하는 경우가 보통입니다. 확장하는 소스에 액세스 할 수없는 경우가 대부분입니까?

건배,

제임스 정적 솔루션의와

+0

상황을 알지 못하면이 질문에 대답하기가 어렵습니다. 비정상적인 상황이 아니라면 생성자를 사용할 수 있기 때문입니다. 마지막은 거의 틀림없이 끔찍합니다. – mquander

답변

5

DateTime을 지정하면 클래스가 인스턴스화됩니다. 어떤 방법을 사용해야합니까?

  1. 정적 "도우미"클래스 : 클래스 C = ClassHelper.GetClass (날짜 시간);
  2. 인스턴스 유형에 대한 정적 메소드 : Class c = Class.GetClass (DateTime);
  3. 정적 확장 클래스/메서드 : Class c = DateTime.GetClass();

내 추천은 the simplest thing that could possibly workcode cohesion의 원칙을 따르는 것입니다.

이것은 확장 및 도우미 클래스를 피하고 Class 클래스 정의에 팩토리 함수를 넣는 것을 의미합니다. 이 외에도 사람들이 보통 공장 기능을 두는 곳이 있습니다.

3

문제는 다른 클래스가 단단히 클래스에 결합 될 수 있다는 것이다.

라고 말하면 클래스 B는 클래스의 인스턴스를 원합니다. 메서드에서 정적 메서드 Class.GetClass(DateTime)을 호출합니다. 이제 Class와는 독립적으로 ClassB를 테스트하려고한다고 가정 해보십시오. (또는 테스트를 거치지 않은 경우 ClassB를 다른 구현 클래스로 재사용하고 전체 계층 구조를 참조하고 싶지는 않습니다.) 어떻게 할 수 있습니까?

이 문제에 대한 해결책은 여러 가지가 있습니다. IoC Containersabstract factory pattern은 2입니다. 일반적으로 인터페이스는 친구입니다. 그들은 또한 과잉 일 수 있습니다. 그것은 당신의 수업이하는 것과 그것이 어떻게 사용될 것인가에 달려 있습니다.

관련 문제