edwardoid
@edwardoid

Какой паттерн использовать?

Задача такая:

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

Плагины работают и возвращают некую структуру как результат. Плагины могу использовать друг друга, даже циклически. Т.е. один плагин может вызвать как помощника другой( а может несколько, в зависимости какие доступны на данный момент), а тот в свою очередь третий плагин или даже первый.

Структура приложения такова:
42d0394a8bc6.png


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


Пишу на C++/Qt
  • Вопрос задан
  • 3714 просмотров
Пригласить эксперта
Ответы на вопрос 3
Colwin
@Colwin
Ведущий Java-разработчик
Необходимо конретизировать требования, а именно:
  • Плагины пишутся для внутреннего использования, или могут быть сторонные плагины?
  • Верно ли предположение, что все вызовы плагинами друг друга происходят в пределах одного и того же потока?


Я бы реализовывал это следующим образом.

Для развязки зависимостей между плагинами создаем менеджер плагинов, который умеет загружать плагин по имени. Хочется, чтобы вызывающий код дергал плагин через единый интерфейс. При этом каждый плагин, логично, имеет свой набор входных параметров. Если не удается выделить общие параметры для всех плагинов, то, видимо, от приведения типа параметра никуда не деться.

Возврат результата, возможно, имеет смысл делать не структурой, а обратным вызовом (если в пределах одного потока). Это даст возможность реализовать поэтапную обработку (если параметром служит какой-либо поток данных).
Ответ написан
conf
@conf
Ruby developer
Может быть вам поможет «Команда» и «Цепочка ответственности».
Ответ написан
zizop
@zizop
Думается мне, что в таком случае надо использовать паттерн «Стратегия».
Стратегия, Strategy — поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы