답변:
플랫폼에 따라 다르지만 명심해야 할 몇 가지 일반적인 사항
버전 관리 응용 프로그램을 업데이트하면 이전 플러그인이 모두 사용되지 않는 문제 (Firefox 문제)
격리 플러그인이 원하는 것을 할 수 있습니까? 당신은 항상 그들을 믿습니까? 또는 일종의 샌드 박스에서 실행하고 권한을 요청해야합니까?
업데이트 플러그인 업데이트를 어떻게 처리합니까?
보안 플러그인 작성자를 보장하고, 스푸핑 또는 사용자가 악성 코드를 설치하도록 속이는 것을 방지하는 방법 일반적으로 일종의 코드 서명으로 해결됩니다.
직렬화 어떤 종류의 격리를 사용하는 경우 종종 다른 스레드 또는 프로세스간에 정보를 직렬화해야합니다. 가장 효율적인 방법은 무엇입니까?
확장 성 어떤 측면을 확장해야합니까? API가 다루기 어려워지지 않으면 서 플러그인의 잠재력을 어떻게 극대화 할 수 있습니까?
플러그인에 대한 타사 개발자를 대상으로하는 경우 가장 중요한 것은 내 경험에 따르면 플러그인 API와 클래스가 나머지 응용 프로그램과 완전히 다른 것으로보고 개발하기 쉽도록 만드는 것입니다 가능한 한. 기본 앱의 아키텍처가 플러그인으로 "배달"하는 것이 매우 쉬워서 플러그인 작성자가 필요한 것보다 훨씬 더 많은 것을 배워야합니다. 플러그인 작성자가 원하는 인터페이스와 경험에 대해 쉽게 생각할 수 있습니다.
또 다른 좋은 사고 방식은 "플러그인은이 모든 것을 코드로 수행하는 것이 아니라"플러그인은이 정보를 제공해야합니다. "라고 생각하는 것입니다. 이렇게하면 응용 프로그램이 필요한 정보를 소비하고 단순화 할 실제 처리를 수행 할 수 있습니다. 플러그인.
또한 일반적으로 코드 대신 설명적인 접근 방식 (xml과 같은 메타 데이터)을 수행 할 때마다 메타 데이터를보다 쉽게 전송, 버전 관리, 배포, 보호 할 수 있고 타사에서 더 쉽게 구성 할 수 있으므로 큰 이점이 있습니다.
.NET에서 확장 성을 위해 MEF를 사용하는 방법에 대한 이 코드 프로젝트 기사를 작성했습니다 . 좋은 소개입니다.
SharpDevelop의 Add-in Architecture , Mono.Addins 및 System.AddIn 과 같은 .NET을위한 다른 확장 성 프레임 워크가 있습니다 .
Java의 경우 Eclipse 플러그인 아키텍처가 있습니다.
일반적인 패턴은 다음과 같습니다.
실제로 그것은 의존성 주입 및 전략 패턴과 많은 것을 공유합니다.
플러그인에 대한 인터페이스 만 제공하면됩니다.
최소한 Activate-Methode (엔트리 포인트)를 포함해야하지만 Initialize 등을 원할 것입니다.
그리고 메뉴 항목을 등록하는 등 레지스트리와 같은 방식으로 호스트 응용 프로그램과 통신 할 수 있어야합니다. 따라서 플러그인에 대해 변경 가능하거나 확장 가능한 것들에 대한 레지스트리가 제공되어야합니다.
또한 호스트 응용 프로그램의 데이터 및 객체에 대한 액세스 가능한 스토리지가 있어야 플러그인이 루틴을 호출 할 수 있습니다. Unity와 같은 DI 컨테이너를 사용하고 플러그인에서 액세스 할 수 있도록하면 필요한 서비스를 해결할 수 있습니다.
Event-Aggregator는 아마도 좋은 아이디어 일 것이므로 플러그인은 이벤트를 throw하고 다른 플러그인과 호스트 응용 프로그램의 이벤트에 분리 된 방식으로 반응 할 수 있습니다. 당신은 분명히 하나를 원합니다!