У меня вопрос о том, как структурировать код относительно объектов GUI.Предположим, у меня есть диалоговое окно, в котором есть элемент управления списком, содержащий набор имен, полученных из базы данных.Пользователь может редактировать имена.Находится ли логика внутри этого диалогового класса или она должна быть снаружи.Чтобы проиллюстрировать, что я имею в виду, вот некоторый псевдокод, показывающий структуру кода, когда логика обрабатывается вне класса диалога:
NamesDialog : wxDialog
{
Private:
..stuff..
Public:
...
SetNames(wxStringArray names);
wxStringArray GetNames();
..stuff..
}
Таким образом, пользователь класса будет делать что-то вроде:
wxStringArray names = DatabaseManager::Get()->GetNames();
names.Sort();
NamesDialogObject.SetNames(names);
NamesDialogObject.ShowModal();
wxStringArray modified_names = NamesDialogObject.GetNames();
AddToDatabase(modified_names); //or something like this.
С другой стороны, логика базы данных может находиться внутри самого класса NamesDialog.В методе show я могу запросить в базе данных имена, и, когда пользователь взаимодействует с элементами управления (в данном случае это элемент управления списком), база данных может обновляться из обработчиков событий.В результате класс NamesDialog имеет только метод Show (), поскольку нет необходимости использовать SetNames или GetNames () и т. Д.
Какой метод обычно предпочтительнее?У меня нет большого опыта работы, поэтому я не уверен, что это правильный способ справиться с этим.Иногда все в классе легче обрабатывать, но получить доступ к объектам, с которыми он взаимодействует, может быть непросто.Обычно это можно сделать, если соответствующие объекты будут одиночными, как менеджер баз данных в приведенном выше примере.