IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Модульная архитектура
сообщение
Сообщение #1


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Я пишу для себя программку, цели в ней особой пока нет, в основном она будет использоваться мною как органайзер \ записная книжка и т.д.

Я составил маленькую карту, как я вижу архитектуру приложения:
Прикрепленное изображение

То есть система такова - есть некое ядро, которое висит в памяти, при выполнение некоторых операций, она загружает модули (реализация - DLL), и выполняет в загруженных модулях функцию со строго определенными параметрами - именем и т.п. (то есть система плагинов), но в систему входят еще и свои 2 модуля, которые являются базовыми для системы.
Вопрос заключается вот в чем - могут ли подключенные модули вызывать функции ранее подключенных модулей ?
Если да, то как ? Нужно подгружать динамическую библиотеку или
(то есть могут ли быть стрелочки на схеме от подключаемых модулей к 2 системным модулям ?)
Спасибо!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Я считаю, что так поступать не стоит. Это несколько противоречит принципу плагинов, а вот взаимодействие плагинов между собой - неплохая идея.
Если модули "системные" то использование их функций в плагинах должно быть регламентировано ядром, т.е. все такие вызовы должны быть проведены через ядро. Это, кстати, позволит в случае чего расширить ядро - вдруг количество "системных" модулей возрастёт.

Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Я считаю, что так поступать не стоит.

Как именно ?
Почему не стоит ?
Цитата
Это несколько противоречит принципу плагинов

В чем противоречит ? Мне показалось, это и есть почти или совсем система плагинов.

Цитата
вот взаимодействие плагинов между собой - неплохая идея.

Да, так вот вопрос чисто технический - могу я загрузив модуль один раз в ядре, и передав ему управление, в нем использовать функции уже подключенных ?
Если да то каков механизм ?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Altair @ 13.04.2006 23:05) *

Как именно ?
Почему не стоит ?

Если у тебя есть Ядро, то оно пуп системы и системные вызовы лцчше осуществлять через него.
Вызовы в обход ядра "череваты боком".
Цитата(Altair @ 13.04.2006 23:05) *

Да, так вот вопрос чисто технический - могу я загрузив модуль один раз в ядре, и передав ему управление, в нем использовать функции уже подключенных ?
Если да то каков механизм ?
Можешь.
Но сначала нужно договориться об интерфейсах. Вызывающий плагин должен быть осведомлён об интерфейсе вызываемого.

Думаю нужно создавать 2 базовых интерфейса:
интерфейс ядра. через него будут происходить все вызовы функция ядра из плагина.
Код

IKernel = interface
//то, что дозволяется плагину производить с ядром

// кроме того список плагинов
end;

почему нельзя производить вызовы в обход ядра: к примеру ты произвёл некоторые изменения в ядре или изменил состав системных ДЛЛ. всё! придётся плагин исправлять и перекомпилировать - это есть нехорошо. а с интерфейсом просто - если ты его расширил, то это никак не скажется на уже готовом плагине.

интерфейс плагина. при загрузке плагина ядро получает этот интерфейс и производит инициализацию плагина, сообщая ему свой интерфейс.
Код

IPlugin = interface
  procedure Initialize(Kernel: IKernel);
end;


взаимодействие плагинов:
если вызывающий плагин осведомлён об интерфейсе вызываемого плагина (он может быть шире чем то, что известно ядру) то всё круто - вызываем методы напрямую.
этому есьт альтернатива - посылка/приём плагинами команд - символьных или числовых констант (на этом основано взаимодействие с Winamp). это должно быть отражено в IPlugin соответствующими методами.

З.Ы. хм. органайзер... кажется я сильно разошёлся ;-)


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Все, спасибо! Меня интересовала теория.. в принципе подумав, я решил, что реализовывать я это буду совсем не на Delphi...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 28.06.2017 21:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"