2013-03-20 2 views
1

동일한 코드를 공유 할 두 제품 라인을 연구 중입니다.2 개의 제품 라인이 동일한 코드를 공유합니다

다른 기능의 경우 두 제품 라인이 동일한 인터페이스 (또는 경우에 따라 기본 클래스)를 구현하고 이러한 유형이 Main 클래스 (두 제품 라인 모두에 대해 별도)에서 생성되고 더 다운 스트림으로 전달됩니다.

비즈니스 로직 내부 깊숙한 코드의 경우 제품 라인 전용 코드를 갖는 것이 매우 어렵습니다. if (ProductLine == "ProductLine1") 및 다른 방법론을 사용하지 않으려합니다.

그래서 NewObject1(), NewObject2() 등을 반환하는 정적 메서드가있는 Factory 클래스를 구현할 계획입니다. 이 Factory 클래스는 Main 클래스에 Factory.RegisterClient (ProductLine1)로 등록됩니다.

따라서 위의 방법을 사용하면 공장 (ProductLine1Factor & ProductLine2Factory가 내부적으로 포함되어 있음)에서 생성 할 개체 유형을 알 수 있습니다.

이 문제에 대한 더 나은 접근 방법을 알고 계십니까? ProductLine1은 이미 존재하고 ProductLine2는 새로운 것입니다 (그러나 ProductLine1과 90 % 유사 함). 두 제품 라인이 존재할 정도로 급격한 리팩토링을 할 수는 없습니다. 가능한 한 최소한의 침입 코드 변경으로 처리하기를 원합니다.

팩토리 접근 방식은 일반적으로 인터페이스를 노출하지만 인터페이스의 문제는 필요한 정적 유형을 노출 할 수 없다는 것입니다.

일부 전문가가 일부 의견을 밝히면 정말 감사하겠습니다.

답변

1

접근 방법은 괜찮습니다.

맞춤 제작 공장 대신 NInject 또는 Unity와 같은 완벽한 IoC 프레임 워크를 사용해야하는 이유는 무엇입니까? 각 클라이언트에 대해 두 번 구현 된 서비스를 컨테이너 구성 파일에서 정적으로 선택할 수 있습니다. 이렇게하면 다른 구현을 추가하는 경우 코드의 한 줄을 변경하지 않아도됩니다. XML 파일에서 일부만 변경하면됩니다.

어쨌든 IoC 컨테이너는 단지 도구 일뿐 아니라 그것을 사용하거나 사용하지 않고 공장을 대신합니다 (IoC 컨테이너는 "스테로이드의 공장"이라고도 함).

+0

감사합니다. Wiktor. 화합은 실제로 좋은 선택이기도합니다. – scriptuser

관련 문제