Я тыкаю палочкой пока только wxWidgets, но, в тред приглашаются и культи-ваторы, т.к. принцип должен быть одинаков.
Первый вопрос касается коммуникации между элементами гуя и данными. Например при каком-то событии/состоянии нужно задизаблить вот этот, этот и этот элемент выпадающего меню, а так же обновить вот то и вот то подменю вот такими титлами. Это простейший пример, может быть гораздо сложнее.
Я вижу два пути:
1) Сеттить все что нужно без событий. Для этого нужно написать кучу помогалок дергающих сеттеры. Где создавать эти помогалки дергающие кучку сеттеров? Одним классом и в нем методы? Это будет адъ и может быстро случиться зависимость «b» от «a» и a" от «b».
2) Коллбеки на события, по айди. Где объявлять эти коллбеки? В каждом элементе, который будет уметь меняться или в одном месте? Если в каждом, то хрен поймешь кто где лежит и за что отвечает, если в одном месте, то чем это отличается от первого варианта?
Наличие тредов склоняет ко второму варианту. Отработал — и только потом событие, а там сами разберутся кто куда. Это по крайней мере удобнее. Пока ты не подготовил данные, никто не рыпнется, мьютексы/семафоры не понадобятся(?).
Второй вопрос будет комплексным:
Как правильно разложить по полочкам структуру приложения? Как правильно минимизировать связность между объектами данных и гуевыми компонентами, или это не нужно и наоборот пользовать объекты тулкита (если таковые имеются) и для данных?
Что я там такое делаю? Да ничего не делаю кроме изучения. Ну нашел я туториалы, ну покопипастил куски кода, ну работает. Дальше что? Мне нужны истории успеха куда сложнее, чем пара кнопок в одном оконце. Смотреть сорцы приложений? Увольте. Там нихрена не понятно из-за огромного кол-ва «мусора», скрывающего архитектурные решения и совершенно без объяснения почему был сделан именно такой выбор архитектуры.
Кто-то скажет — если не знаешь что лепишь, то и не получится архитектуру набросать. Отчасти да. Но я не о самой архитектуре, а о выборе пути для построения правильной архитектуры и порядка в исходниках.
Можете просто рассказать о том как это все делается в виде: «я обычно кладу эти компоненты сюда, а те туда, а вот это делается вот так, потому что тут и тут позже иначе будет узкое место».