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