Как начать с разработки системы на основе модулей или плагинов? - PullRequest
5 голосов
/ 17 сентября 2008

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

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

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

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

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

Любые отзывы приветствуются.

Ответы [ 4 ]

9 голосов
/ 17 сентября 2008

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

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

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

1 голос
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...