Наличие графического интерфейса в отдельном процессе - PullRequest
1 голос
/ 26 ноября 2011

В настоящее время я разрабатываю графический интерфейс для созданного Java-приложения. Я хотел бы сохранить графический интерфейс в отдельном процессе от остальной части клиента. Обоснование этого:

  • Уменьшен риск сбоя. Например. OutOfMemoryError в графическом интерфейсе не приведет к сбою остальной части клиента.
  • Я получаю API "бесплатно". Если позже я захочу позволить другим людям программно получить доступ к клиенту, я могу просто позволить им использовать тот же API, который использует графический интерфейс.
  • Я пишу графический интерфейс в SWT, и клиент создается с использованием IntelliJ. Так как Eclipse имеет гораздо лучшую поддержку SWT, имеет смысл держать их отдельно, так что я могу использовать Eclipse для GUI-кода и IntelliJ для остальных.

Теперь у меня вопрос: какую технологию я должен использовать, чтобы выставить клиентский интерфейс в GUI? RMI - это то, что пришло в голову первым. Однако это имеет недостатки, заключающиеся в том, что API ограничивается только Java. Я также не уверен, насколько хорошо RMI подходит для крупномасштабного развертывания (например, как он обрабатывает локальные брандмауэры?). Однако я пока не хочу это исключать.

Я должен также упомянуть, что у меня есть некоторые требования к развертыванию:

  • Должен быть в состоянии работать от имени администратора.
  • Должен иметь возможность обрабатывать ограничительные локальные ограничения брандмауэра.
  • Развертывание должно быть автоматическим (это крупномасштабное потребительское приложение) и работать в Windows, Mac OS X и Linux.

Учитывая эти ограничения, какое решение вы бы использовали?

1 Ответ

2 голосов
/ 26 ноября 2011

Я столкнулся с такой же ситуацией некоторое время назад, за исключением того, что серверная часть была в Python, а графический интерфейс был в Java.

Важные моменты для рассмотрения:

  • насколько гибким и детальным должен быть интерфейс между графическим интерфейсом и внутренним интерфейсом. Вы хотите иметь возможность сделать что-то из графического интерфейса? 5 разных вещей? 10? 50? Насколько тесно связан графический интерфейс - будет ли он знать о / будет вызывать отдельные методы в серверной части?
  • как выходные данные попадают из серверной части в графический интерфейс. Может ли он просто записывать в STDOUT или во временные файлы? Нужно ли что-то более сложное?
  • формат вывода. В идеале, он должен быть легко разбираемым, что указывает на то, что XML или JSON могут быть вашим лучшим выбором.

Может оказаться полезным JSON-RPC : это стандарт удаленных вызовов методов для отдельных программ.


В общем, мне трудно сказать, что будет лучше для вас. Я отказался от RPC и дал бэк-энду простой интерфейс командной строки; вывод был записан во временные файлы и STDERR, как объекты JSON. Я чувствую, что это было хорошее решение, потому что интерфейс между программами был очень простым и несвязным.

...