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

StackOverflow https://stackoverflow.com/questions/78004

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Апач Феликс — это полная реализация с открытым исходным кодом (есть и другие, такие как Затмение Равноденствие).

Другие советы

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

Другой вариант – СервисЗагрузчик добавлено в Java 1.6.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top