| проблема проектирования плагинов: доступ к информации об объ | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | snoman | |
| Дата: | 17.08.04 19:52 |
| Здравствуйте. Проектирую систему с плагинами и столкнулся вот с такой проблемой: Каждый плагин системы представлен некоторым объектом (далее плагин), по сути являющимся абстрактной фабрикой, которая создает уже объекты-процедуры (далее процедуры). Также он выдает информацию об именах процедур, их параметрах и т.д. и т.п. И каждая процедура должна уметь рассказать о самой себе. Т.е. и плагин и процедура должны иметь доступ к одной и той же информации. Пока придумалось два варианта: 1) Общую информацию сделать глобальной. — самый простой вариант, но субъективно не люблю использовать глобальные данные. 2) Инкапсулируем всю информацию о процедурах в плагин. Спрашиваем у процедуры указатель на плагин, к которому она принадлежит, а затем у плагина запрашиваем информацию об этой самой процедуре. — как-то оно получается не очень красиво, слишком много вызовов. 3) ??? Может посоветуете чего? |
| Re: проблема проектирования плагинов: доступ к информации об | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Stoune | |
| Дата: | 18.08.04 03:33 |
| Здравствуйте, snoman, Вы писали: S>Здравствуйте. S>2) Инкапсулируем всю информацию о процедурах в плагин. Спрашиваем у процедуры указатель на плагин, к которому она принадлежит, а затем у плагина запрашиваем информацию об этой самой процедуре. — как-то оно получается не очень красиво, слишком много вызовов. S>3) ??? Может посоветуете чего? На чём пишеш-то. На .NET я такую функциональность делал через атрибуты и через мета информацию. Зы только у меня ещё были плагины плагинов Можеш имитировать метаинформацию если технология не даёт непосредственной поддержки, зашивать в длл в ресурсы(можно отдельно, но потом потерять легко и можно обновить забыть) конфиг с параметрами процедур. ... |
| Re[2]: проблема проектирования плагинов: доступ к информации | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | snoman | |
| Дата: | 18.08.04 04:56 |
| Здравствуйте, Stoune, Вы писали: S>На чём пишеш-то. На С++, в частности использую C++ Builder 6.0. |
| Re: проблема проектирования плагинов: доступ к информации об | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | S.Yu.Gubanov | http://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]: проблема проектирования плагинов: доступ к информации | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | 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]: проблема проектирования плагинов: доступ к информации | Оценить ![]() ![]() ![]() ![]() ![]() ![]() |
| От: | Stoune | |
| Дата: | 19.08.04 03:59 |
| Здравствуйте, snoman, Вы писали: S>Здравствуйте, Stoune, Вы писали: S>>На чём пишеш-то. S>На С++, в частности использую C++ Builder 6.0. Тогду зашей в ресурсы длл например строковые ресурсы с названиями функций, а потом грузи их динамично, но насколько я припоминаю в VCL есть свой механизм метаданых, она через него информацию о компонентах получает, посмотри в справке по библиотеке. ... |