플러그인이있는 C ++ 응용 프로그램에서 기본 동작 변경 [닫기

StackOverflow https://stackoverflow.com/questions/311247

  •  10-07-2019
  •  | 
  •  

문제

간단히 말해서 : 팩토리+플러그인 메커니즘을 설계하고 구현하는 가장 좋은 방법은 무엇입니까? 따라서 플러그인이 기본 응용 프로그램의 객체를 대체 할 수 있습니다.

우리는 응용 프로그램을 구축 할 코드베이스가 있습니다. 코드 기반은 응용 프로그램의 70-95%에 적합합니다. 즉, 각각의 새로운 응용 프로그램에서 기본 동작의 5-30%를 변경해야합니다 (새 기능 추가, 기본 논리 변경, GUI 등).

구현은 플러그인 기반입니다. 코드베이스는 EXE 및 DLL에 내장되어 있으며, 기본 EXE가 실행될 때 필요한 기능을 추가하는 DLL을로드합니다.

현재 각 플러그인은 다음 기능을 노출시킵니다.

PluginInterface* PluginInit()
{
    return new MyCustomizedPluginInterface();
}

PluginInterface가 다음과 같이 정의됩니다.

class PluginInterface {
public:
    virtual SomeClass1* customizedSomeClass1() = 0;
    virtual SomeClass2* customizedSomeClass2() = 0;
};

SomeClass1/SomeClass2에는 기본 동작이 있지만 플러그인에 의해 재정의 및 변경 될 수 있습니다.

현재 구현으로 새로운 맞춤형 클래스를 추가하기가 어렵습니다. 플러그인에서 기본 응용 프로그램의 모든 클래스를 교체하고자하므로 객체 공장을 사용하는 것이 합리적입니다.

내가 아는 하나의 SDK는 다음 기술을 사용합니다.

PluginInterface* PluginInit(GodObject* godObject)
{
    FactoryForSomeClasses* factoryForSomeClasses = 
        godObject->factoryForSomeClasses();
    factoryForSomeClasses->setSomeClass1Creator( MyCustomizedSomeClass1::create); // create is a static creator function.
    factoryForSomeClasses->setSomeClass2Creator( MyCustomizedSomeClass2::create);
}

이 접근법에 대한 대안이 있는지 궁금합니다.

방금 설명한 것처럼 플러그인 시스템/공장을 설계하고 구현하는 것이 좋습니다.

도움이 되었습니까?

해결책

Dobb 박사에는이 정확한 문제에 대해 논의한 기사가 몇 번있었습니다. 여기에 있습니다 링크 문제의 기사에.

제쳐두고 프로젝트에 대한 플러그인의 직선 C 인터페이스를 고수하고 싶을 수도 있습니다. 이렇게하면 거의 모든 언어로 작성된 코드를 최소한의 번거 로움으로 프레임 워크에 연결할 수 있습니다. C ++는 훌륭하지만 Java와 Python Lands에 존재하는 놀라운 프레임 워크와 같이 C ++에 존재하는 것보다 더 많은 것을 활용할 수 있다는 것은 장기적으로 유익 할 수 있습니다.

다른 팁

플러그인 프레임 워크의 CodeProject 예제를 살펴 보셨습니까?https://secure.codeproject.com/kb/dll/plugin.aspx http://www.codeproject.com/kb/library/dynobj.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top