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