svp » 16 июн 2010, 15:40
Мне видится идеальной система плагинов, применяемая в firefox и thunderbird.
Можно как один плагин, так и несколько в пакете всегда хранить в zip-контейнере, как у того же файрфокса.
Сам контейнер никогда не нужно блокировать, а плагины можно при установке просто распаковывать во внутренний рабочий каталог. Для portable версии (коих любителей здесь over 9к) этот каталог можно иметь внутри каталога с прогой, а для установленных Планет (или вообще любых хост-приложений, использующих эту плагинную систему) хранить в юзерском хомяке. В точичности как делает файрфокс. Зачем изобретать самокат (а-ля FAR с блекджеком), когда есть отличный кладезь мозиловских идей?
Установленный плагин будет иметь свой гарантированно уникальный каталог в виде его же гуида. Плагины могут иногда иметь зависимости. Я не предлагаю реализовывать аналог дебиановского, к примеру, пакетного менеджера для отслеживания зависимостей, но чтобы избежать конфликтов можно просто предусмотреть в плагине специальный файл требований к среде, где перечислить допустимые вилки версий для всего окружения, что ему требуется. Ну и следовать правилам: меняется интерфейс -- меняем версию; меняется реализация -- меняем только субверсию.
По всему выходит, что для пущей гибкости и, как ни парадоксально, простоты каждый плагин (или/и пакет?) должен всегда иметь в своей основе эдакий xml-файлик (xml потому, что структура легко расширяется с обратной совместимостью), где будет определяться основная техническая информация о плагине. О том, что он собой представляет (dll с реализацией некого интерфейса, или набор js-скриптов, как у мозиллы), о зависимостях от компонентов хост-приложения, о зависимостях от других плагинов, вилках совместимости с тем, отчего зависимости.
Да. Кроме кода в пакетах можно, ведь, хранить и некоторые ресурс, например, kml, или подложки какие-то.