freepascal.ru • Просмотр темы - Одна программа и несколько GUI к ней, как это работает?
 

Одна программа и несколько GUI к ней, как это работает?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Одна программа и несколько GUI к ней, как это работает?

Сообщение xterro » 13.02.2018 13:56:08

Приветствую, любопытства и расширения гругозора для, подскажите, как реализуется например, консольная программа и несколько гуёв к ней. В том же Линуксе много примеров таких программ, когда есть консольная "утилитка" и несколько разных гуёв к ней, например тот же spice симулятор или торрент-трекер transmission. Как они взаимодействуют друг с другом, какими способами, через что? Как это реализуется на уровне архитектуры приложения/классов/кода?
xterro
постоялец
 
Сообщения: 139
Зарегистрирован: 23.02.2014 13:49:33

Re: Одна программа и несколько GUI к ней, как это работает?

Сообщение Ichthyander » 13.02.2018 15:57:22

По-моему все просто, если конечно я правильно понял вопрос. Отделение функционала от интерфейса. Да даже само использование классов, реализующих какой либо функционалов позволяет потом сделать различные интерфейсы: web, gui, консоль и другие. Достаточно перенести классы, реализующие нужный функционал в отдельные модули и потом использовать. Приложения будут отличаться только интерфейсом. На практике можно даже вынести функционал в отдельную библиотеку (dll, so), если слишком тяжелый код получается....
Аватара пользователя
Ichthyander
постоялец
 
Сообщения: 409
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Одна программа и несколько GUI к ней, как это работает?

Сообщение wofs » 13.02.2018 18:32:29

xterro писал(а):В том же Линуксе много примеров таких программ, когда есть консольная "утилитка" и несколько разных гуёв к ней, например тот же spice симулятор или торрент-трекер transmission.

В данном случае GUI просто рулит консольной утилитой и парсит ее вывод, предоставляя вам результат. Отчасти поэтому зачастую проще сразу запустить консоль и за пару секунд набрать комманду с параметром, чем запускать GUI, тыкать там мышкой...
Аватара пользователя
wofs
постоялец
 
Сообщения: 372
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Одна программа и несколько GUI к ней, как это работает?

Сообщение xterro » 14.02.2018 09:31:35

Понятно, спасибо :)
xterro
постоялец
 
Сообщения: 139
Зарегистрирован: 23.02.2014 13:49:33

Re: Одна программа и несколько GUI к ней, как это работает?

Сообщение bormant » 14.02.2018 14:15:15

... но обычно поступают иначе.
Общую функциональность выносят в библиотеку.
Библиотеку дергают из консольного или графического приложения.
Наглядный пример: libparted, parted, gparted.
Аватара пользователя
bormant
постоялец
 
Сообщения: 382
Зарегистрирован: 21.03.2012 11:26:01

Re: Одна программа и несколько GUI к ней, как это работает?

Сообщение Mirage » 16.02.2018 00:22:27

Общее решение - у ядра, т.е. той части, которая что-то полезное делает, есть API. А морды это API используют.
Что это за API это уже вопрос конкретной реализации. Это должно быть что-то межпроцессное, чтобы могли использовать другие процессы.
Например, сейчас модно REST API. Тогда можно и десктопный и мобильный и веб клиент легко сделать. В т.ч. управление по сети с другого устройства.
Или бинарный сетевой API.
Если делать дин. библиотеку, то это только для чего-то, что требует большой пропускной способности, а обычно гимора много, а толку мало.
Общение через консоль тоже так себе вариант, особенно если предполагается человекочитаемый формат, как у того же GDB.
В принципе, любой способ IPC подойдет.
Mirage
энтузиаст
 
Сообщения: 813
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Одна программа и несколько GUI к ней, как это работает?

Сообщение Python » 11.03.2018 15:15:50

Как правило, GUI к консольным утилитам запускает консольную утилиту скрытно (самый распространённый пример - ffMpeg, на нём 95% Windows-конверторов форматов базируются... и нет, я не согласен, что проще командную строку написать, из GUI утилиты проще выбрать пресет, кинуть туда пять файликов, нажать галку "Выключить комп по завершению", запустить процесс и уйти спать... в консоли придётся целый батник писать строчек на десять). Что можно почитать по теме? Самое простое:
http://wiki.lazarus.freepascal.org/Exec ... s#TProcess
Теоретически, это должно работать кроссплатформенно. Если кроссплатформенность не интересует - можно сделать на WinAPI:
http://www.delphikingdom.com/asp/viewit ... alogid=736
Варианты решения, где GUI и консоль разделяют одну библиотеку тоже бывают, но существенно реже, обычно это делается вынесением 99% функционала консольной утилиты в DLL (в линуксе тоже есть что-то подобное), а GUI может этот функционал использовать. Пример - 7z.
Вариант решения, в котором GUI и консоль используют один и тот же блок кода при компиляции (пакет, модуль), а потом становятся независимыми друг от друга - самый простой, но на моей практике я не припомню, чтобы он где-то встречался. Понятное дело, этот вариант - самый простой.
Ну и последний вариант, которым я обычно пользуюсь - в зависимости от запуска программы (с аргументами или без) она запускается либо как коньсоль, либо как GUI приложение. В первом случае её можно использовать в скриптах для автоматизации (например, надо отработать 3000 файлов - руками указать каждый файл... не, проще сразу застрелиться, а for %%i in ... делает работу за десять минут на всё про всё...) а во втором случае - пользоваться при небольшом количестве файлов. Минус очевиден - программа начинает весить столько же, сколько сумма консольной+GUI версии, но я бы назвал это оправданным - нельзя ничего потерять :-)
Python
новенький
 
Сообщения: 12
Зарегистрирован: 23.01.2018 21:50:17


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru