Выбор метода взаимодействия для модульной разработки

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

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

На данный момент я решил просто загрузить символы из общих объектов и работать с ними, зная их типы и сигнатуры функций. Я также рассмотрел возможность использования IPC, такого как DBus, но я не уверен, будет ли это излишним или совершенно ненужным.

Кроссплатформенность не так уж и важна сейчас, но это может произойти в будущем.

Каковы плюсы и минусы одного против другого? Есть ли другие решения для рассмотрения, о которых я не нашел?

0

Решение

IPC является избыточным для компонентов, загруженных в процессе. Все дополнительные аннотации, касающиеся размера буферов и направления копирования, не нужны, когда вызывающая сторона и вызываемая сторона могут напрямую делиться указателями.

Если вы когда-нибудь захотите перейти на Windows, учтите, что общие библиотеки могут иметь разные распределители и разную компоновку классов. Лучше всего экспортировать фабричную функцию, вернуть указатель на интерфейс (абстрактный класс, имеющий только чисто виртуальные функции-члены и не имеющий данных, данные и реализации находятся в подклассе), и позволить объекту освободиться (один из Виртуальный член функции уничтожает его).

Например, вы можете посмотреть на COM IUnknown, Вам не нужна вся сложность запросов интерфейса и так далее, но использование чисто виртуальных функций и подсчета ссылок — это очень гибкий, очень масштабируемый и чрезвычайно переносимый шаблон.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]