О некоторых вопросах компонентной архитектуры программного приложения презентация

Содержание

Слайд 1О некоторых вопросах компонентной архитектуры программного приложения
Алексей Игнатенко


Слайд 2Независимый программный модуль, обычно подключаемый на этапе выполнения программы
Что такое компонента

(plug-in)?

Слайд 3Преимущества компонентной архитектуры


Слайд 4Компонентная архитектура


Слайд 5Отличие обычных DLL от компонент


Слайд 6DLL:
IPlugin *createInstance(const char *);

Application:

IPlugin* pluginInstance = createInstance(“RendererPlugin”);
IRenderer* renderer = dynamic_cast(pluginInstance)
Простое решение


Слайд 7Одно из трех:
Нарушается безопасность типов
static_cast
Ограничивается применение плагинов
dynamic_cast
Необходима разработка сложной и ломкой

кастомной RTTI
QueryInterface
Необходимы дополнительные соглашения для поиска однотипных плагинов (по имени, например)

Недостатки простого решения


Слайд 8Интерфейсы определяется в приложении
Для интерфейсов применяются соглашения COM
Плагины региструются сами в

нужном месте системы

Предлагаемое решение


Слайд 9Фабрики для плагинов


Слайд 10Application:






DLL:

Вариант 1, локальный


Слайд 11Система разрабатывается с нуля для поддержки плагинов

Вариант 2, глобальный


Слайд 12А нужно ли поддерживать возможность работы из разных сред?
Версии интерфейсов /

библиотек
Суперклассы - да/нет
Приведение типов
Подсчет ссылок
Как искать плагины?
События

Проблемы и размышления


Слайд 13Если нет требований, чтобы плагины и/или основное приложение работали из разных

сред, нет смысла поддерживать соглашения COM
Не нужны STDMETHODCALLTYPE, BSTR и т.п.
Можно выделять и удалять память в разных DLL (это стоит проверить)
Более того: можно использовать набор базовых неабстрактных классов и подключать общую библиотеку ко всем плагинам
Внимание: но нужно очень четко работать с версиями в этом случае!

А нужно ли поддерживать возможность работы из разных сред?


Слайд 14Проверять версии
1) У библиотеки (DLL)
2) У плагина (интерфейса)
Как проверять?
Как поддерживать

совместимость?
Старые плагины должны работать с новыми интерфейсами?
Новые плагины должны работать со старыми интерфейсами?

Версии интерфейсов / библиотек


Слайд 15Функции:
запрос на информацию без создания экземпляра
= статические функции
Создание объекта =

фабрика
Нужны ли?
Накладные расохды на создание/поддержку

Суперклассы


Слайд 16Dynamic_cast
QueryInterface
Приведение типов


Слайд 17AddRef/Release – единственный вариант.
Есть ли другие возможности? Если нет, почему?
Подсчет ссылок


Слайд 18Перебор файлов в папках
Конфиг-файл (XML – рекомендуется MS)
В реестре (пишется инсталлятором)
Как

искать плагины?

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика