2012-03-21 2 views
0

확장 포인트를 사용하여 다양한 플러그 가능 비트 기능을 정의한 RCP 응용 프로그램이 있습니다.활성 구현을 하나만 가져야하는 확장 점을 모델링하는 올바른 방법은 무엇입니까?

어떤 경우에는 논리적으로 한 번에 많은 구현이 활성화 될 수있는 확장 점이 있습니다. 예를 들어, DataFeed 지점과 응용 프로그램이 논리적으로 많은 기능을 지원할 수 있습니다.

다른 경우에는 응용 프로그램의 실행중인 인스턴스에서 단일 구현이 활성화되어 있어야합니다. 나는 사용자가 그들 사이를 전환 할 수 있기를 원하지만 플러그 인을 제거/다시 설치하는 것은 사용자에게 친숙하지 않습니다.

내가 처리 할 수있는 방법은 확장 점을 IExecutableExtensionFactory를 사용하는 팩토리로 정의하는 것입니다. 그런 다음 각 플러그인에는 활성 여부를 나타내는 환경 설정이 있어야합니다. 활성화되어 있지 않으면 팩토리는 null을 반환하고 응용 프로그램은 다음 옵션을 봅니다. 없는 경우 적절한 값을 사용하십시오.

이것은 매우 적절하다고 느끼지 않지만, 이러한 유형의 행동을 모델로 삼지 않은 다른 접근 방법이 있는지 궁금합니다. 누구나 기분이 좋아지는 방법이 있습니까?

답변

2

솔루션에서 확장 기능이 활성화되어 있는지 여부를 결정하는 책임은 확장 공급자 (공장)에 할당됩니다. 활성 확장을 선택하는 실제 논리에 관계없이 확장자가 점인 제공자 (즉, 팩토리를 호출하는 클래스)에서 제어하는 ​​것이 더 좋을 것이라고 말하고 싶습니다. 확장 공급자는 서로에 대해 알지 못하기 때문에 (또는 알 필요가 없습니다.)

이 실제로 이클립스에서 꽤 일반적인 상황이며 일반적으로 확장을함으로써 해결이 워크 벤치 상태에 따라 활성화해야하는 연장 결정하는 확장 점 처리기에 대한 추가 속성을 정의 (org.eclipse.ui.handlers의, 예를 들어, enabledWhen 속성을 참조 확장 포인트) 또는 사용자 환경 설정.

관련 문제