проблема проектирования плагинов: доступ к информации об объ в избранное  msdn  новое    Оценить +1123x:) +-   подписка   модер. 
От: snoman 
Дата: 17.08.04 19:52
Здравствуйте.

Проектирую систему с плагинами и столкнулся вот с такой проблемой:

Каждый плагин системы представлен некоторым объектом (далее плагин), по сути являющимся абстрактной фабрикой, которая создает уже объекты-процедуры (далее процедуры). Также он выдает информацию об именах процедур, их параметрах и т.д. и т.п. И каждая процедура должна уметь рассказать о самой себе. Т.е. и плагин и процедура должны иметь доступ к одной и той же информации.

Пока придумалось два варианта:
1) Общую информацию сделать глобальной. — самый простой вариант, но субъективно не люблю использовать глобальные данные.


2) Инкапсулируем всю информацию о процедурах в плагин. Спрашиваем у процедуры указатель на плагин, к которому она принадлежит, а затем у плагина запрашиваем информацию об этой самой процедуре. — как-то оно получается не очень красиво, слишком много вызовов.

3) ??? Может посоветуете чего?
Re: проблема проектирования плагинов: доступ к информации об в избранное  msdn  новое    Оценить +1123x:) +-   модер. 
От: Stoune 
Дата: 18.08.04 03:33
Здравствуйте, snoman, Вы писали:

S>Здравствуйте.



S>2) Инкапсулируем всю информацию о процедурах в плагин. Спрашиваем у процедуры указатель на плагин, к которому она принадлежит, а затем у плагина запрашиваем информацию об этой самой процедуре. — как-то оно получается не очень красиво, слишком много вызовов.


S>3) ??? Может посоветуете чего?


На чём пишеш-то.
На .NET я такую функциональность делал через атрибуты и через мета информацию. Зы только у меня ещё были плагины плагинов, вот там я запарился с последовательностью загрузки и система очень долго грузилась, в конце-концов плюнул и реализировал всё просто и без наворотов, потому как трудоёмкость резко повышается, быстродействие падает, а реальной позитивной отдачи не очень.

Можеш имитировать метаинформацию если технология не даёт непосредственной поддержки, зашивать в длл в ресурсы(можно отдельно, но потом потерять легко и можно обновить забыть) конфиг с параметрами процедур.
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: проблема проектирования плагинов: доступ к информации в избранное  msdn  новое    Оценить +1123x:) +-   модер. 
От: snoman 
Дата: 18.08.04 04:56
Здравствуйте, Stoune, Вы писали:

S>На чём пишеш-то.


На С++, в частности использую C++ Builder 6.0.
Re: проблема проектирования плагинов: доступ к информации об в избранное  msdn  новое    Оценить +1123x:) +-   модер. 
От: S.Yu.Gubanovhttp://moikrug.ru/users/P628059486/
Дата: 18.08.04 06:22
Здравствуйте, snoman, Вы писали:

S>3) Может посоветуете чего?


Люди для этих целей несколько десятков лет назад придумали модули и полиморфные переменные. Плугин представляется для приложения как полиморфная переменная, а создается она в модуле-реализации плугина.

1) В одном модуле пишутся интерфейсы плугинов.
2) В других модулях пишутся сами плугины — реализации интерфейсов.
3) Когда плугины (модули) динамически загружаются, то они регистрируют себя в системе о том что они (плугины) теперь есть. С этого момента система может их использовать.
4) В случае дальнейшей ненужности система сама может выгрузить более не нужный модуль с реализацией конкретного плугина.

Например, в операционной системе Aos BlueBottle написанной на Active Oberon практически все является плугинами (файловая система, загрузчик модулей, драйверы, ...) ядро системы экспортирует интерфейс чего-то, а реализует этот интерфейс какой-то плугин. Страничка одного из создателей http://www.cs.inf.ethz.ch/~muller/ Описание системы дано в его докторской диссертации: http://e-collection.ethbib.ethz.ch/cgi-bin/show.pl?type=diss&nr=14755 (2002 год)

В С++, конечно, модулей нет, так что Вам придется малость поизвращаться...
Re[2]: проблема проектирования плагинов: доступ к информации в избранное  msdn  новое    Оценить +1123x:) +-   модер. 
От: snoman 
Дата: 18.08.04 14:36
Здравствуйте, S.Yu.Gubanov, Вы писали:

SYG>Здравствуйте, snoman, Вы писали:


S>>3) Может посоветуете чего?


SYG>Люди для этих целей несколько десятков лет назад придумали модули и полиморфные переменные. Плугин представляется для приложения как полиморфная переменная, а создается она в модуле-реализации плугина.


SYG>1) В одном модуле пишутся интерфейсы плугинов.

SYG>2) В других модулях пишутся сами плугины — реализации интерфейсов.
SYG>3) Когда плугины (модули) динамически загружаются, то они регистрируют себя в системе о том что они (плугины) теперь есть. С этого момента система может их использовать.
SYG>4) В случае дальнейшей ненужности система сама может выгрузить более не нужный модуль с реализацией конкретного плугина.

Вообще-то вопрос был не об этом. Что такое полиморфизм и интерфейсы я прекрасно знаю. Вопрос скорее о разграничении обязанностей интерфейсов и внутреннем устройстве плагина.

SYG>В С++, конечно, модулей нет, так что Вам придется малость поизвращаться...


Тем не менее есть абстрактные классы и наследование. Хотя и это может показаться извращением.
Re[3]: проблема проектирования плагинов: доступ к информации в избранное  msdn  новое    Оценить +1123x:) +-   модер. 
От: Stoune 
Дата: 19.08.04 03:59
Здравствуйте, snoman, Вы писали:

S>Здравствуйте, Stoune, Вы писали:


S>>На чём пишеш-то.


S>На С++, в частности использую C++ Builder 6.0.


Тогду зашей в ресурсы длл например строковые ресурсы с названиями функций, а потом грузи их динамично, но насколько я припоминаю в VCL есть свой механизм метаданых, она через него информацию о компонентах получает, посмотри в справке по библиотеке.
... << RSDN@Home 1.1.4 @@subversion >>