Вкратце: какой лучший способ разработать и внедрить механизм фабрики + плагин, чтобы плагины могли заменять объекты в главном приложении.Изменение поведения по умолчанию в приложении C++ с плагинами
У нас есть база кода, из которой мы создаем наши приложения. База кода отлично подходит для 70-95% приложений, а это означает, что в каждом новом приложении нам нужно изменить 5-30% поведения по умолчанию (добавить новые функции, изменить логику по умолчанию, добавить графический интерфейс и т. Д.).
Реализация основана на плагинах: база кода встроена в EXE и DLL, а когда основной EXE запущен, мы загружаем DLL, которая добавляет требуемые функции.
В настоящее время каждый плагин предоставляет следующие функции:
PluginInterface* PluginInit()
{
return new MyCustomizedPluginInterface();
}
Где PluginInterface определяется как:
class PluginInterface {
public:
virtual SomeClass1* customizedSomeClass1() = 0;
virtual SomeClass2* customizedSomeClass2() = 0;
};
И SomeClass1/SomeClass2 имеют некоторое поведение по умолчанию, но может быть отменено и изменено с помощью плагина ,
Текущая реализация затрудняет добавление новых настраиваемых классов. Мы хотели бы заменить каждый класс в главном приложении плагином, поэтому имеет смысл использовать объекты-объекты.
One SDK, который я знаю, использует следующую технику:
PluginInterface* PluginInit(GodObject* godObject)
{
FactoryForSomeClasses* factoryForSomeClasses =
godObject->factoryForSomeClasses();
factoryForSomeClasses->setSomeClass1Creator(MyCustomizedSomeClass1::create); // create is a static creator function.
factoryForSomeClasses->setSomeClass2Creator(MyCustomizedSomeClass2::create);
}
Интересно, есть ли какие-нибудь альтернативы такого подхода.
Как вы рекомендуете разрабатывать и внедрять систему плагинов/фабрику, как я только что описал?
Можете ли вы объяснить немного больше о том, как вы собираетесь управлять созданием объектов с вашего завода? В нашем плагине мы имеем обширную конфигурационную файловую систему, которая описывает, как должны быть загружены объекты и иерархия объектов. – sep 2008-11-22 13:53:44