이 보인다. 이는 귀하의 수업이 MyClass<T>
이기 때문에 공장도 T
- 특정이어야하기 때문입니다. 그러나이 간단한 대답보다 더 많은 것이 있습니다.
계속하기 전에 세 번째 가능성을 추가 할 것입니다. 비 정적 팩토리 클래스. 팩토리를 사용하는 객체는 팩토리 객체를받는 공용 속성을 갖습니다. 다른 인스턴스가 지정되어 있지 않으면 속성의 Getter가 기본 팩토리를 인스턴스화합니다. 이렇게하면 나중에 종속성 주입을 허용하고 자신의 위조 된 공장에 의존하는 단위 테스트를 작성하는 데 도움이됩니다. 솔루션 (잠시 제네릭을 무시)과 같이 보일 것입니다 :
public class ISomeFactory { ... }
public class DefaultSomeFactory: ISomeFactory { ... }
public class ClientClass
{
public ISomeFactory FactoryOfSome // Right place for dependency injection
{
get
{
if (_fact == null)
_fact = new DefaultFactory();
return _fact;
}
set { _fact = value; }
}
private ISomeFactory _fact;
}
을 지금 말했듯이, 클래스 제네릭 매개 변수 MyClass<T>
로 이동 한 후 공장뿐만 아니라 일반적인 매개 변수와 함께 가야한다 : Factory<T>
가. 이 솔루션은 일반 팩토리의 일반 메소드보다 낫습니다. 인스턴스를 생성하는 것이 T
특정 일 수 있기 때문입니다. 당신은 기존의 팩토리 클래스의 행동을 무시하고 문자열에 대한 전문화되어 인스턴스를 생성하는 다른 방법을 가질 수있다, 이런 식으로
public class SpecialSomeFactory: DefaultSomeFactory<string> { ... }
: 일반 공장 솔루션은 당신이 할 수 있습니다. 문자열을 다루는 것이 int 나 double과 같은 원시 타입을 다루는 것보다 훨씬 다른 경우가 많기 때문에 이것은 중요합니다. 공장을 전문화하는 기회를 갖는 것이 유익 할 수 있습니다. 하지만 이제는 정적 인 팩토리를 갖는 것이 왜 나쁜 생각인지 알 수 있습니다. 정적은 확장 될 수 없습니다.
이 질문은 [당신의 가장 논란이되는 프로그래밍 견해는 무엇입니까?] (http://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion)에 대한 좋은 후보라고 생각하지만 C# 언어 –