Совет по Java для плагиноподобной архитектуры - PullRequest
1 голос
/ 03 февраля 2011

Мое приложение выведет график, для которого пользователь должен определить макет. Пользовательский класс макета должен реализовывать интерфейс, определенный мной. Как мне это сделать? У меня есть специальная папка, где я ищу классы макетов? Пользователь передал имя класса в качестве аргумента приложению?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

Несколько подходов, используемых одновременно, обычно дают наилучшие результаты. Разные пользователи могут выбирать разные способы настройки вашего приложения. Например:

  • Каталог по умолчанию, где пользователи могут размещать плагины. Или даже список каталогов, который может включать некоторый подкаталог папки приложения, некоторый общесистемный каталог в зависимом от платформы месте «данных приложения», некоторый локальный пользовательский каталог.
  • Файл конфигурации с некоторыми опциями для управления поиском и выбором плагинов.
  • Системное свойство Java, которое определяет список каталогов для поиска плагинов, например java -Dorg.something.appname.plugindirs=plugindir1;plugindir2.
  • Специальный параметр командной строки или системное свойство Java для выбора конкретного плагина, возможно, предоставляющий абсолютный путь или просто имя для поиска в каталогах, указанных вышеописанными методами.

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

0 голосов
/ 03 февраля 2011

Модель, выбранная инструментарием на протяжении многих лет, AWT, Swing и т. Д., Должна передаваться макету в качестве аргумента вашему API.Предполагая, что вас вызывают из командной строки:

java -jar yourapp.jar;theirintf.jar yourapp org.example.theirintf  

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

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