О некоторых вопросах компонентной архитектуры...

18
Алексей Игнатенко

Upload: malise

Post on 22-Jan-2016

64 views

Category:

Documents


0 download

DESCRIPTION

О некоторых вопросах компонентной архитектуры программного приложения. Алексей Игнатенко. Что такое компонента ( plug-in) ?. Независимый программный модуль, обычно подключаемый на этапе выполнения программы. Преимущества компонентной архитектуры. Компонентная архитектура. - PowerPoint PPT Presentation

TRANSCRIPT

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

Алексей Игнатенко

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

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

Page 3: О некоторых вопросах компонентной архитектуры программного приложения
Page 4: О некоторых вопросах компонентной архитектуры программного приложения
Page 5: О некоторых вопросах компонентной архитектуры программного приложения
Page 6: О некоторых вопросах компонентной архитектуры программного приложения

DLL:◦ IPlugin *createInstance(const char *);

Application:

◦ IPlugin* pluginInstance = createInstance(“RendererPlugin”);◦ IRenderer* renderer = dynamic_cast<IRenderer>(pluginInstance)

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

Одно из трех:◦ Нарушается безопасность типов

static_cast◦Ограничивается применение плагинов

dynamic_cast◦ Необходима разработка сложной и ломкой кастомной

RTTI QueryInterface

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

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

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

системы

Page 9: О некоторых вопросах компонентной архитектуры программного приложения
Page 10: О некоторых вопросах компонентной архитектуры программного приложения

Application:

DLL:

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

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

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

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

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

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

Если нет требований, чтобы плагины и/или основное приложение работали из разных сред, нет смысла поддерживать соглашения COM

Не нужны STDMETHODCALLTYPE, BSTR и т.п. Можно выделять и удалять память в разных DLL

(это стоит проверить) Более того: можно использовать набор базовых

неабстрактных классов и подключать общую библиотеку ко всем плагинам◦ Внимание: но нужно очень четко работать с версиями в

этом случае!

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

Проверять версии◦ 1) У библиотеки (DLL) ◦ 2) У плагина (интерфейса)

Как проверять? Как поддерживать совместимость?◦ Старые плагины должны работать с новыми

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

интерфейсами?

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

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

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

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

Dynamic_cast QueryInterface

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

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

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

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