Логика диалоговых окон
От: MNZ Россия  
Дата: 01.09.05 06:10
Оценка:
Каким образом правильно строить логику диалоговых окон приложения? Имеются в виду не диалоги открытия/сохранения файлов и т.п., с ними всё понятно, а, например, диалог редактирования настроек приложения и подобные.

1. Диалоговое окно управляет только своими элементами и их данными. Фактически, задача диалога — модифицировать некую структуру, а как применить её, не его диалога дело. Вызов происходит так:
CDialog dlg;

dlg.SetData();

if (dlg.DoModal() == IDOK) {
    dlg.GetData();
    ...
}


2. Диалоговое окно является частью системы, которому доступны системные объекты и сервисы. Логика зашита в диалог. Вызов происходит просто
CDialog dlg;
dlg.DoModal();


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

Во втором варианте за счёт инкапсуляции всё просто и красиво. Не нужно заботиться о всяких конвертациях, собирать данные в кучу, а затем рассовывать их обратно по местам. Просто вызвал диалог, а он сам всё сделает как надо. Но каждый диалог привязан к одному месту программы.

Так как же правильно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.