Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обеспечить расширяемость? 
:(
    Опции темы
Melevir
Дата 13.7.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача такая: есть интерфейс, через него происходит вызов функционала. Есть набор классов, в которых реализован этот функционал. Еще есть необходимость в нормальной расширяемости - написал новый класс, заинклудил его и все, готово (так мне видится в идеале).

Есть идея сделать в каждом таком классе стандартный метод типа AddMenuOption(CMainDlg*);, запихать его в конструктор главного окна и объявить как поле интерфейса, но тогда классу придется давать ссылку на интерфейс, а это не айс..

Еще есть идея упаковать все это в длл, но она довольно бессмысленна - код в моем распоряжении, модульное функционирование самого ПО не нужно.

Вот такая вот бедаsmile.
Если предложите чего-нибудь хорошего - буду благодарен.
PM MAIL   Вверх
Earnest
Дата 14.7.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Смотря какие классы и что от них требуется. Из твоего поста не совсем понятно.
Но вот тебе пример, как я пишу обработку команд, может, пригодится.
Во-первых, есть маленький абстрактный класс - команда, с методами Execute и Update. Во-вторых есть коллекция команд, их может быть несколько на разных уровнях - у приложения, у окон, у документа - все зависит от задачи. И есть способ получения и диспетчеризации этих команд: получение - от нажатия кнопок, пунктов меню и т.д., Диспетчеризация - порядок обработки - в каком порядке идет обращение к коллекциям команд. Все это написано один раз и не требует изменения при расширении. А расширении происходит так: каждая конкретная команда объявляется как статический объект и регистрируется в какой-то коллекции. Я это делаю с помощью макросов, но можно и без них, несущественно. Команды остаются маленькими объектами, и не имеют состояния, но они могут для выполнения обращаться к другим известным им классам и объектам.
Т.е. для добавления нового функционала нужно добавить ручки в UI, написать этот функционал  и зарегистрировать команду, которая его выполняет. Два последних действия могут выполняться совершенно локально (хоть в одном файле), никак не портя окружающую действительность. Что касается расширения UI, то мне проще делать это в редакторе ресурсов, но при желании можно возложить это дело и на регистрацию команды, дописав в оболочку соответствующий менеджер.


--------------------
...
PM   Вверх
Melevir
Дата 14.7.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 То есть эта команда - нечто вроде промежуточного класса между интерфейсом и реализацией, так я понял?
PM MAIL   Вверх
Earnest
Дата 15.7.2010, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Не совсем. Команда - это самостоятельный объект, просто он очень маленький и не имеет состояния, так что может объявляться статически. Команда унифицирует регистрацию и выполнение любых действий.
А реализация функционала может быть совершенно любой, в каждом конкретном случае; команда просто ее вызывает. 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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