Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Edynchik от Июль 17, 2013, 16:31



Название: Помогите с архитектурой приложения
Отправлено: Edynchik от Июль 17, 2013, 16:31
Добрый день! Возникла следующая проблема, экспериментальным путем доказано что моя архитектура не работает. Предложите, пожалуйста, альтернативу. В общем зада следующая. Есть канал из которого необходимо считывать информацию, и отображать на экране. Я ее решил следующим образом, создал класс формы,в нем еще два класса. Один для считывания из канала (отдельный класс, потому что каналов несколько) и класс отображения (графиков отображения может быть тоже несколько). Когда по таймеру из канала считалась информация посылается сигнал в форму у которого параметром выставлена необходимая для записи инфа. Класс отображения по таймеру выдает сигнал в форму - запрос информации. И форма соответственно обработав этот сигнал, передает сигнал содержащий данные для отображения. И все вроде отлично работало до момента работы деструктора: возникает ситуация в которой сигнал с запросом инфы для отображения уже послан,срабатывает деструктор класса отображения и соответсвенно рисовать уже некуда...как следствие крах. Что можно придумать?


Название: Re: Помогите с архитектурой приложения
Отправлено: Bepec от Июль 17, 2013, 16:39
Это ваша тема про осциллографы? Что-то такое там было :)

Переусложнённая у вас архитектура.

Моё видение:
1) класс главного окна приложения.
2) класс отображения графика.
3) класс приёма информации (мб даже в отдельном потоке :) ).

Архитектура проста - 2)/3) существуют связками. Точнее 2) в конструкторе создаёт привязанный к себе 3).

3) получает информацию, отсылая сигналом данные в 2). 2) получает данные и отображает их.

При закрытии 2) сначала уничтожается  3) и после чего удаляется 2).

PS ох блин понаписал я :D самому бы потом понять.




Название: Re: Помогите с архитектурой приложения
Отправлено: Edynchik от Июль 17, 2013, 16:45
Это ваша тема про осциллографы? Что-то такое там было :)

Переусложнённая у вас архитектура.

Моё видение:
1) класс главного окна приложения.
2) класс отображения графика.
3) класс приёма информации (мб даже в отдельном потоке :) ).

Архитектура проста - 2)/3) существуют связками. Точнее 2) в конструкторе создаёт привязанный к себе 3).

3) получает информацию, отсылая сигналом данные в 2). 2) получает данные и отображает их.

При закрытии 2) сначала уничтожается  3) и после чего удаляется 2).

PS ох блин понаписал я :D самому бы потом понять.




да все таже тема...пытался как то реанимировать, но бестолку...в ваших словах определенно есть логика...хм а есть еще тонкие моменты в будущем о которых можете предупредить...


Название: Re: Помогите с архитектурой приложения
Отправлено: kambala от Июль 17, 2013, 17:50
И все вроде отлично работало до момента работы деструктора: возникает ситуация в которой сигнал с запросом инфы для отображения уже послан,срабатывает деструктор класса отображения и соответсвенно рисовать уже некуда...как следствие крах. Что можно придумать?
можно добавить класс-менеджер, который будет перенаправлять сигналы в объект отображения если он существует


Название: Re: Помогите с архитектурой приложения
Отправлено: Bepec от Июль 17, 2013, 22:05
Я думаю, что вашу программу можно реанимировать спокойно и неспешно. Но увы, нужно это смотреть на работающем проекте :D


Название: Re: Помогите с архитектурой приложения
Отправлено: Edynchik от Июль 18, 2013, 12:53
Это ваша тема про осциллографы? Что-то такое там было :)

Переусложнённая у вас архитектура.

Моё видение:
1) класс главного окна приложения.
2) класс отображения графика.
3) класс приёма информации (мб даже в отдельном потоке :) ).

Архитектура проста - 2)/3) существуют связками. Точнее 2) в конструкторе создаёт привязанный к себе 3).

3) получает информацию, отсылая сигналом данные в 2). 2) получает данные и отображает их.

При закрытии 2) сначала уничтожается  3) и после чего удаляется 2).

PS ох блин понаписал я :D самому бы потом понять.



изначально у меня так и было сделано, только пришлось от нее отказаться ввиду того, что информация из одного канала может понадобится нескольким классам отображения...т.е. я сделал сохранение данных из канала в классе формы...


Название: Re: Помогите с архитектурой приложения
Отправлено: Bepec от Июль 18, 2013, 15:47
Ничто не мешает посылать второй сигнал допустим.

Но лучше тогда менеджера создавать.


Название: Re: Помогите с архитектурой приложения
Отправлено: Old от Июль 18, 2013, 15:50
Ничто не мешает посылать второй сигнал допустим.

Но лучше тогда менеджера создавать.
Зачем? К одному сигналу могут быть привязаны стопитсот получателей.


Название: Re: Помогите с архитектурой приложения
Отправлено: Bepec от Июль 18, 2013, 19:27
Потому что менеджер - это хорошо. А 100500 связанных сигналов - это плохо для отладки.


Название: Re: Помогите с архитектурой приложения
Отправлено: Old от Июль 18, 2013, 19:51
Аргументы будут? :)


Название: Re: Помогите с архитектурой приложения
Отправлено: Edynchik от Июль 18, 2013, 20:00
Ничто не мешает посылать второй сигнал допустим.

Но лучше тогда менеджера создавать.
Не могли бы описать работу класса менеджера? То что управлять, понятно...а далее...


Название: Re: Помогите с архитектурой приложения
Отправлено: Old от Июль 18, 2013, 20:17
Не могли бы описать работу класса менеджера? То что управлять, понятно...а далее...
Хороший вопрос. :)