С чего начать разработку системы на основе модулей или плагинов?
Вопрос
Я намерен разработать систему, полностью основанную на модулях.База системы должна иметь поддержку для поиска плагинов, их запуска и обеспечения способов взаимодействия этих модулей.В идеале должна быть возможность по желанию добавлять новые модули и удалять неиспользуемые, а модули должны иметь возможность использовать функциональные возможности друг друга, если они доступны.
Эту систему следует использовать в качестве основы для систем моделирования, где в разных модулях происходит множество событий, и другие модули могут захотеть что-то сделать на основе этого.
Система, которую я собираюсь разработать, будет на Java.На мой взгляд, я собираюсь создать папку с подпапкой для каждого модуля, включающую XML-код, описывающий модуль с такой информацией, как имя, возможно, какие события он может вызвать и тому подобное.Полагаю, мне, возможно, придется написать собственный ClassLoader, чтобы разобраться с этим.
Дело в том, что я не знаю, выдерживает ли моя идея хоть какую-то критику, и, конечно же, я намерен создать рабочий прототип.Однако я никогда раньше не работал над по-настоящему модульной системой и не совсем уверен, как лучше всего решить эту проблему.
С чего мне начать?Существуют ли общие проблемы и подводные камни при разработке такого рода системы?Как мне заставить модули взаимодействовать друг с другом, сохраняя при этом изоляцию (т. е. вы удаляете модуль, а другой модуль, который его использовал, остается в здравом уме)?Есть ли какие-либо руководства, спецификации или статьи, которые я могу прочитать, которые могли бы дать мне представление о том, с чего начать?Было бы лучше, если бы они были основаны на Java, но это не является обязательным требованием, поскольку сейчас мне нужны идеи, а не код.
Любая обратная связь приветствуется.
Решение
Вам обязательно стоит посмотреть ОСГи.Он направлен на то, чтобы быть тот механизм компонентов/плагинов для Java.Он позволяет вам модульизировать ваш код (в так называемые пакеты) и обновлять пакеты во время выполнения.Вы также можете полностью скрыть пакеты реализации от нежелательного доступа со стороны других пакетов, например.предоставить только API.
Eclipse был первым крупным проектом с открытым исходным кодом, который реализовал и использовал OSGi, но они не использовали его в полной мере (без установки/обновления плагинов без перезапуска).Однако если вы начнете с нуля, это даст вам очень хорошую основу для системы плагинов.
Апач Феликс — это полная реализация с открытым исходным кодом (есть и другие, такие как Затмение Равноденствие).
Другие советы
Не вдаваясь в подробности, вам следует рассмотреть Весна а ознакомление с OSGI или средами Eclipse RCP также даст вам некоторые фундаментальные концепции, которые вам необходимо иметь в виду.
Другой вариант – СервисЗагрузчик добавлено в Java 1.6.
Есть много способов сделать это, но можно использовать что-то простое, используя Reflection.Вы пишете в своем XML-файле имя файла (на самом деле это будет класс).Вы можете проверить, какой это тип, и создать его обратно с помощью отражения.Класс может иметь общий интерфейс, который позволит вам определить, действительно ли внешний файл/класс является одним из ваших модулей.Вот некоторая информация о Отражение.
Вы также можете использовать предварительно закодированный фреймворк, например этот SourceForge.текст ссылки это даст вам первый хороший шаг к созданию модуля/плагина.