Архитектура программного обеспечения - как плагин должен получать информацию от абонента (c ++?) - PullRequest
0 голосов
/ 30 января 2020

говорят, что у нас есть какой-то процесс, и он использует плагин для выполнения неизвестной реализации - поэтому плагин реализует заголовок и вызывает виртуальные функции для выполнения какой-то работы.

что теперь, если плагин хочет вернуть данные из основного процесса? получить что-то gui или другие измененные состояния объектов, которые не могут быть переданы во время вызова виртуальной функции?

проще всего сделать интерфейс двунаправленным, чтобы плагин мог задавать вопросы, но он чувствует неправильно для меня.

Я прочитал, что интерфейсы должны быть однонаправленными, и на самом деле у меня должен быть входной и выходной интерфейс для плагина, но я все еще не отвечаю на базовый c вопрос о том, как получить данные из вызывающая сторона?

class A
{
 ...
 void doWork()
 {
     plugin->doWorkInPlugin();
 }
 private:
 MYinterafce* plugin;
}

class MYinterface 
{
virtual doWorkInPlugin();
...
}

class MYPlugin : public MYinterface
{
   doWorkInPlugin();
   {
       **** i want to know something in class A or GUI status or class Z *** 
    output->hello("blah");

   }
private:
MYoutputInterface *output;
}

обновление * уточнить, почему я использую пустой параметр в функции * дело в том, что doWorkInPlugin - долго выполняющаяся функция, возможно, в потоке необходимо знать измененные состояния объектов, которые изменились после звонка

...