|
198 / 93 / 43
Регистрация: 09.11.2019
Сообщений: 414
|
||||||||||||||||
Архитектура оконного приложения27.09.2021, 20:06. Показов 928. Ответов 2
Всем привет.
Опишу проблему целиком, думаю, её суть станет понятна по ходу. Итак, имеется некая предметная область. Пусть это будет, например, движение машинок по трассе. Трасса может быть представлена как обычная дорога, как шоссе, как тоннель. Тоннель характерен тем, что там используется однополосное и одностороннее движение по светофору. Два других типа дороги конфигурируются по кол-ву полос, по направлению движения. Скорость машинок задаётся по какому-нибудь случайному закону распределения. Подобным же образом задаётся интервал между появлениями новых машинок на трассе - интенсивность движения. Всё это отрисовывается в GUI. Все настройки задаются так же через GUI. Для каждой настройки я создаю новое окошко, а предыдущее скрываю через Hide(), чтоб была возможность вызвать это окошко через кнопку Назад на основной форме. Соответственно, получается несколько окошек настроек: Тип трассы -> Дорога/шоссе -> настройки выбранного типа дороги -> распределение потока движения -> распределение скорости транспорта -> основная форма для отрисовки // для распределения используется одно и то же окошко, но это два разных объекта Либо Тип трассы -> Тоннель -> распределение потока движения -> распределение скорости транспорта -> задание настроек светофора -> основная форма для отрисовки. И вот уже вот тут видна суть проблемы - приходится открывать разные окошки для разных типов дорог, какими-то if'ами отслеживать, а какая форма была открыта до этого/какой тип имеет трасса, чтоб обеспечить дальнейшее корректное функционирование. Конфигурация всей системы описывается следующим образом:
1. В основной форме я обращаюсь к объектам примерно так:
4. Через эти же конструкторы форм мне приходится тянуть ссылку на предыдущую форму. Причем используя метод Hide, я не закрываю предыдущую форму, а просто скрываю. Поэтому при закрытии основной формы у меня где-то там висит скрытое окошко. Я пока это не лечил, но подозреваю, что придётся вдобавок через все формы тащить список ссылок на уже отработавшие формы, чтоб в основной форме их все разом закрыть. Что из этого можно вылечить и как это сделать?
0
|
||||||||||||||||
| 27.09.2021, 20:06 | |
|
Ответы с готовыми решениями:
2
Зависание оконного приложения при прослушке порта Архитектура многопоточного приложения Универсальная хост-плагинная архитектура приложения |
|
148 / 92 / 56
Регистрация: 03.02.2021
Сообщений: 284
|
|
| 29.09.2021, 12:21 | |
|
Может это повредит инкапсуляции (но не думаю), но я бы реализовал это примерно так:
1) Видоизменил бы публичный класс SystemConfiguration, в котором перечислил бы все настройки, которые изменяются во всей этой цепочке окон (тип трассы, настройки светофора, скорость транспорта и т.д.), а сами ссылки на окна убрал. 2) При нажатии кнопки "Опции" создается форма, скажем, fOpt1 в качестве входного параметра конструктора передается объект класса SystemConfiguration. 3) Пользователь выбирает тип трассы и нажимает "Далее". В параметр TraceType заносится тип трассы и в зависимости от выбранного типа создается та или иная форма и ей в конструктор передается все тот же SystemConfiguration. 4) После этого форму fOpt1 можно с чистой совестью удалять, поскольку если пользователь нажмет "Назад" по данным из SystemConfiguration, можно сразу понять какая форма нужна, создать ее, передать на вход все тот же конфиг и из этого конфига заполнить все поля теми данными, которые пользователь ввел ранее.
0
|
|
|
198 / 93 / 43
Регистрация: 09.11.2019
Сообщений: 414
|
||||
| 29.09.2021, 12:31 [ТС] | ||||
|
Проблему закрытия форм решил через контейнер-синглтон и метод-расширение для Form.
0
|
||||
| 29.09.2021, 12:31 | |
|
Помогаю со студенческими работами здесь
3
Превью оконного приложения Проектирование оконного приложения Запуск оконного приложения в терминальном сеансе определённого пользователя Архитектура приложения Архитектура приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|