Каким образом правильно строить логику диалоговых окон приложения? Имеются в виду не диалоги открытия/сохранения файлов и т.п., с ними всё понятно, а, например, диалог редактирования настроек приложения и подобные.
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>>