crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Вопрос архитектуры приложения
call_me_Frank
  опции профиля:
сообщение 23.3.2012, 12:21
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как считаете, господа?

Есть у меня GUI, созданный при помощи QML. Есть "движок" программы. Есть, соответственно, задача реализации обмена данными между ними.

Сначала я сделал таким образом, что множество сигналов от интерфейса связывались непосредственно с конкретными функциями движка, ну и в обратную сторону аналогично. Теперь решил переделать это так, что бы было всего 2-3 сигнала в каждую сторону, но теперь каждый сигнал будет нести в себе информацию о том, от кого он, какую операцию представляет, ну и данные. И есть столько же функций приемников, которые занимаются распределением пришедших данных уже по конкретным функциям. Такая вот прослойка. В итоге получаем уменьшение количества, скажем так, каналов связи между GUI и движком, и, возможно, некоторую универсальность, на будущее, при добавлении новых функций с той или другой стороны.

Пишу это, потому что имеются некоторые сомнения в сердце :rolleyes: , насколько оправдан такой подход?

Как считаете, господа?)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_Гость_*
сообщение 26.3.2012, 20:05
Сообщение #2





Гости








    


Можно, например, в QML код передавать некий высокоуровневый обьект(ы), который представляет на нужном уровне детализации весь серверный код и производить общение уже через него . На проекте на котором я работаю именно такая архитектура и используется, и вполне успешно.
Например если пишешь некий плеер, то в первом приближении это выглядело бы примерно так:
class IPlayer: public QObject
{
   Q_OBJECT
public:
virtual void loadServer() =0;
virtual void openFile(const QString & fileName) = 0;
virtual void play() = 0;
signals:
void serverLoaded(ServerError error);
void fileOpened(FileError error);
void playbackBegin();
void playBackErrorOccured(PlayBackError);
void playbackEnd();
};

Притом обьект может быть один а интерфейсов сколько угодно, правда тогда скорей всего придется отказаться от плюшек QObject'a или делать какую нибудь унифицированною систему эвентов построеную на сигналах. Хотя Qt'ишная система плагинов вроде позволяет такой подход без отказа от QObject, попробуй почитать про всякие Q_DECLARE_INTERFACE, Q_INVOKABLE и т.д.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 16:38