Общие сведения о PliaginAPI в SAS.Планете

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

Общие сведения о PliaginAPI в SAS.Планете

Сообщение vdemidov » 22 июн 2010, 12:29

Вот что вообще представляет из себя система с поддержкой плагинов:
Изображение
Попытаюсь сформулировать свои требования к инфраструктуре плагинов.
1. Любой плагин берется из пакета плагинов.
2. Пакет плагинов находится в файле (Тоесть сам пакет может состоять и из нескольких файлов, но главный один).
3. Сейчас пакет плагинов это просто dll с расширением spp, но должна быть возможность легко добавить новые способы хранения плагинов, например с электронной подписью dll, скриптовые или еще какие-нибудь.
4. Файл с пакетом не блокируется без необходимости (например, пока не понадобится плагин из пакета, не вызывается LoadLibrary) в надежде что пользователь не начнет удалять файлы при работающей программе, а если и начнет, то не будет удивляться потом ошибкам.
5. Каждый пакет идентифицируется по GUID.
6. У каждого пакета есть номер версии, при загрузке из пакетов с одинаковым GUID выбирается с наибольшей версией.
7. Должна быть возможность добавления кеширования информации о пакетах плагинов между сеансами работы программы.
8. Должна быть возможность блокирования пакетов и отдельных плагинов по разным признакам, в том числе по черным и белым спискам.
9. Каждый плагин идентифицируется по GUID.
10. Если в нескольких пакетах есть плагины с одинаковым GUID, то используется первый загруженный.
11. Каждый плагин принадлежит к какому-то типу плагинов.
12. По сути тип плагина определяет публичный контракт, который плагин должен выполнять. В простейшем случае поддерживать определенный интерфейс.
13. В программе должны легко добавляться новые типы плагинов.

PS: Не путаем отдельные плагины и пакеты плагинов. У каждого плагина них свой GUID, и у пакета в который они входят тоже есть свой уникальный GUID.
PPS: Опять же, не путаем плагины и пакеты плагинов. Информация о версии есть только у пакета плагинов. Тобишь если разработчик обновил какой-то пакет плагинов и поменял ему имя файла, то загрузится по-любому самый новый, даже если старый удалить забыли. А вот 10-й пункт это уже нарушение, но тоже можно представить ситуацию - в новой версии пакет плагинов разделили на 2 или наоборот объединили два пакета, но этого стоит избегать всеми силами.
PPPS: А сейчас объясню почему я выбрал вариант, что в dll может быть много плагинов, а не ровно 1 штука. Просто в моем понимании каждый конкретный тип плагина задает очень жесткие рамки и требования для реализующих его, но разных типов я планирую наделать очень много. Поэтому вполне может получится, что какой-то механизм сможет реализовывать 3-4 типа плагинов используя общие 90% кода. Тогда разносить их в отдельные длл получается ну уж очень нерентабельно. Да и ресурсоемко держать столько открытых dll.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1685
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 135 раз.

Вернуться в Раздел для разработчиков программы SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1