내 데스크톱 앱용 플러그인 아키텍처가 있습니다. Apple's code loading guide을 사용하여 상당히 표준 방식으로 구현했습니다.코코아 플러그인 패턴
나는 플러그인의 인스턴스가 응답 할 수 있거나 응답해야하는 모든 메소드를 정의하는 단일 프로토콜을가집니다.
이 프로토콜은 약 80 가지 방법을 정의하는 유일한 문제입니다. 이 방법들 중 약 10 가지만이 강제적이며 나머지는 선택 사항입니다. 일부 플러그인은 80 개의 메소드를 모두 구현하지만 나머지는 기본 메소드 만 구현합니다.
플러그인 번들이 호스트 애플리케이션에 어떤 클래스를 인스턴스화할지 알려주는 일반적인 방법은 Info.plist 파일의 NSPrincipalClass
키를 사용하는 것입니다. 이것은 단일 키이므로 하나의 클래스 만 인스턴스화 할 수 있습니다.
플러그인 프로토콜은 단일 파일이며이 단일 클래스에서 사용될 것으로 예상됩니다.
내 질문은 : 플러그인 작성자가보다 유연한 구현을 할 수있게하는 동시에이 단일 프로토콜 내부의 기능을 여러 프로토콜로 분할하는 가장 좋은 방법은 무엇일까요?
현재 기존 플러그인 그들의 주요 클래스 다음과 같습니다
- (BOOL)respondsToSelector:(SEL)selector {
return [self forwardingTargetForSelector:selector] ? YES : NO;
}
- (id)forwardingTargetForSelector:(SEL)selector {
id target = nil;
if ([self.instanceOne respondsToSelector:selector]) {
target = self.instanceOne;
} else if ([self.instanceTwo respondsToSelector:selector]) {
target = self.instanceTwo;
} else if ([self.instanceThree respondsToSelector:selector]) {
target = self.instanceThree;
}
return target;
}
그러나 오히려이 같은 임시 시스템을 정의하는 플러그인 작가에게 그것을 강요보다, 내가 수용하기 위해 응용 프로그램의 플러그인 프레임 워크를 싶습니다 보다 유연한 솔루션 이 기능의 재치 덩어리로 당신의 80 개 방법을 나눌 수있는 경우