С чего начать разработку системы на основе модулей или плагинов?

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

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

Система, которую я собираюсь разработать, будет на Java. Насколько я понимаю, я намерен создать папку с подпапкой для каждого модуля, которая включает XML, который описывает модуль с такой информацией, как имя, возможно, какие события он может вызвать, и тому подобное. Полагаю, мне может понадобиться написать собственный ClassLoader, чтобы разобраться с этим.

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

С чего мне начать? Существуют ли общие проблемы и подводные камни при разработке такой системы? Как заставить модули взаимодействовать друг с другом, сохраняя изоляцию (т. Е. Вы удаляете модуль, а другой модуль, который его использовал, остается нормальным)? Могу ли я прочитать какие-либо руководства, спецификации или статьи, которые могут дать мне некоторые идеи о том, с чего начать? Было бы лучше, если бы они были основаны на Java, но это не требование, так как сейчас я ищу идеи, а не код.

Любая обратная связь приветствуется.


person Community    schedule 16.09.2008    source источник


Ответы (4)


Вам обязательно стоит взглянуть на OSGi. Он нацелен на то, чтобы быть механизмом компонента / подключаемого модуля для Java. Это позволяет вам модулировать ваш код (в так называемых пакетах) и обновлять пакеты во время выполнения. Вы также можете полностью скрыть пакеты реализации от нежелательного доступа других пакетов, например. предоставить только API.

Eclipse был первым крупным проектом с открытым исходным кодом, который реализовал и использовал OSGi, но они не использовали его в полной мере (установка / обновление плагинов без перезапуска запрещены). Однако если вы начнете с нуля, это даст вам очень хорошую основу для системы плагинов.

Apache Felix - это полная реализация с открытым исходным кодом (есть и другие, например Eclipse Equinox).

person Alexander Klimetschek    schedule 16.09.2008
comment
Большое спасибо за предоставленное направление. Это был очень быстрый ответ, и его было вполне достаточно, чтобы я начал. Спасибо еще раз! - person ; 17.09.2008

Не вдаваясь в подробности, вам следует взглянуть на Spring, и ознакомление с OSGI или фреймворками Eclipse RCP также даст вам необходимо иметь в виду некоторые фундаментальные концепции.

person Joe Skora    schedule 16.09.2008

Другой вариант - ServiceLoader, добавленный в Java. 1.6.

person John Meagher    schedule 16.09.2008

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

Вы также можете использовать предварительно кодированный фреймворк, такой как этот SourceForge, один текст ссылки, который даст вам первый хороший шаг для создания модуля / плагина.

person Patrick Desjardins    schedule 16.09.2008