Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Универсальная плагинная архитектура 
:(
    Опции темы
Vitaly333
Дата 3.3.2010, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: нет
Всего: 2



Стоит задача разработать плагинную архитектуру для некоторой универсальной системы, которая состоит из ядра и множества подключаемых модулей (плагинов). Подключаемые модули могут разрабатываться после ввода системы в эксплуатацию. 
Немного о ядре:
Ядро построено по MVC схеме и в большей степени на абстракциях. Есть  активная  модель - одиночка (Singleton), которая занимается только подпиской и отпиской представлений и их уведомлением, а также содержит список объектов (экземпляры класса MyObject ). Каждый такой объект может содержать множество абсолютно любых данных о себе.   Контроллер управляет доступом к объектам модели и редактирует модель. Также в ядре определенно несколько видов представлений модели. Представление проверяет каждый объект на возможность его отображения (например, если объект реализует интерфейс IDrawable то соответствующее представление его отображает). Имеется менеджер плагинов, который отвечает за загрузку, выгрузку и проверку плагинов на валидность. 

Взаимодействие ядра с плагинами осуществляется через определенный интерфейс IPlugin, известный как ядру так и плагинам. В этом интерфейсе определен лишь один метод, который получает в качестве аргумента ссылку на контроллер. Таким образом плагин, реализовав этот интерфейс получает доступ к модели через контроллер. 


Вся основная функциональность должна быть реализована в плагинах. Плагины получают доступ к модели, наполняя её своими данными и функциональностью. Данные и функциональность модели определяются только в объектах модели и нигде больше. Т.е. каждый плагин создает своего наследника от класса MyObject,наполняет его своими специфическими данными и функциями и добавляет в модель. Для управления и отображения  объектами с новой функциональностью в плагине могут быть созданы собственные контроллер и представления, путем расширения их kernel-предков. 

Разработчикам плагинов поставляется PluginAPI, в который кроме интерфейса IPlugin включена спецификация ядра.

 
При проектировании такой архитектуры возникает несколько вопросов:
Как  организовать взаимодействие между плагинами?  т.е. как при написании сторонним разработчиком нового плагина воспользоваться функциональностью, заложенной в другом уже используемом в системе плагине, не имея доступа к спецификации этого плагина? т.е. в режиме выполнения основного приложения новый плагин сможет получить от ядра модель с объектами, содержащую новую информацию но понять что это за новая информация не сможет так как не обладает её описанием.  В связи с этим возникает вопрос как вообще формировать PluginAPI для разработчиков плагинов?   


Чувствую что наворотил что то ужасное... Подскажите как правильно всё спроектировать под такой специфический MVC.

Это сообщение отредактировал(а) Vitaly333 - 3.3.2010, 02:16
PM MAIL   Вверх
RomanEEP
Дата 8.3.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Я думаю что несмотря на то, что в теории универсальная система это система для всего, но на практике, как правило, система оказывается "ни для чего". Поэтому мне кажется правильнее будет ограничить универсальность системы. 
Например включить в ядро ряд необходимых абстрактных классов от MyObject, от которых будут наследовать свои собственные объекты, плагины и которые (абстрактные классы) заложат в себе методы, необходимые для взаимодействия этих объектов между собой.

Т.е мне кажется, что взаимодействовать между собой могут только плагин-объект, и объект-объект, но не плагин-плагин. Потому что если плагин создал объект, а затем удалился, то объект в модели останется, и с ним надо будет как-то работать, поэтому я и предлагаю описать базовые методы классах от TMyObject о которых будут знать все - ядро, плагины и другие объекты.

ЗЫ: Плагины после загрузки становятся частью контроллера?
PM MAIL   Вверх
Vitaly333
Дата 9.3.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: нет
Всего: 2



Цитата

Например включить в ядро ряд необходимых абстрактных классов от MyObject, от которых будут наследовать свои собственные объекты, плагины и которые (абстрактные классы) заложат в себе методы, необходимые для взаимодействия этих объектов между собой.

Тогда функциональность плагинов будет сильно ограничена. И какие методы в в эти абстрактные классы включать сложно сказать...
Я хочу сделать примерно так как это сделано в Eclipse. Там каждый плагин сам в себе определяет несколько точек расширения - т.е. несколько интерфейсов и/или классов из своей логики которые смогут расширить другие плагины. Эти классы прописываются в ядре и от туда их можно как то выгрузить - т.е. как то предоставить в виде SDK для разработчиков плагинов(пока непонятно как).  Разработчик плагина смотрит в среде, к которому подключено ядро с загруженными плагинами, список точек расширения и выбирает ему нужные. После этого среда генерит ему SDK с нужными ему классами и интерфейсами. Далее он подключает этот SDK к своему проекту и создает там свой плагин. 
Также я хочу ввести кроме точек расширения , точки использования - т.е. конкретные реализации классов, которые могут и/или должны быть использованы в других плагинах (например, в одном плагине определен класс для работы с матрицами Matrix и несколько интерфейсов которые могут быть расширены в других плагинах. И эти интерфейсы имеют зависимость от класса Matrix. Тогда чтобы расширить эти интерфейсы в других плагинах нужно обязательно знать что такое тип данных Matrix, а значит класс Matrix тоже должен быть включен в SDK).
Таким образом в плагине определяются:
- точки расширения;
- точки использования;
- расширения точек других плагинов.

Как  вам такой подход? Насколько сложно это сделать?

Это сообщение отредактировал(а) Vitaly333 - 9.3.2010, 14:15
PM MAIL   Вверх
RomanEEP
Дата 10.3.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Мне сложно говорить об абстрактном предмете. Можешь примерно описать что программа должна моделировать и какие к ней требования?
PM MAIL   Вверх
stron
Дата 31.3.2010, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

Репутация: нет
Всего: 36



OSGi смотрел?


--------------------
подписи нет
PM ICQ   Вверх
neutrino
Дата 29.4.2010, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Типа второй эклипс хочешь написать?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
ida
Дата 7.5.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


замужем
****


Профиль
Группа: Завсегдатай
Сообщений: 2277
Регистрация: 14.5.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 58



Vitaly333, присоединяюсь к предыдущим ораторам: объясните, для чего система предназначена и какие функции она будет выполнять.

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

Только после этого можно уточнять детали, в противном случае сопровождение готового продукта сильно усложнится.
PM WWW   Вверх
Любитель
Дата 7.5.2010, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



А это для чего и на чём? Для явы/дотнета/питона существует массма отличных палгин-фреймворков. Или просто интересно написать?


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Системный анализ, проектирование и UML"
Се ля ви

Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем:

• предпроектные обследования объектов автоматизации;

• разработка концепции создания систем;

• моделирование бизнес-процессов (в т.ч. на UML);

• проектирование архитектуры систем;

• управление проектами;

• управление качеством;

• CASE-средства;

• реинжиниринг.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Системный анализ, проектирование и UML | Следующая тема »


 




[ Время генерации скрипта: 0.1057 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.