Графический интерфейс Java для приложения C++ - это хороший дизайн?
Да, я был немного удивлен, когда интервьюер упомянул, что они используют графический интерфейс Java-swing для приложения C/C++. Мне было любопытно и спросил его, как они на самом деле объединяют их вместе, его ответ был "через обмен сообщениями". Интересно! Ну, я новичок в этом подходе и мне любопытно, действительно ли компании используют этот вид дизайна. Если да, то есть ли большое преимущество для этого дизайна? Мне немного сложно понять, как этот дизайн будет работать хорошо, если у вас есть какие-либо ссылки, пожалуйста, поделитесь.
К вашему сведению, продукт представляет собой приложение для резервного копирования данных (возможно, на платформе Linux/Unix). Спасибо.
резюме
4 ответа
Я не вижу ничего плохого в этом. Очень распространено объединять различные компоненты через обмен сообщениями. Я действительно считаю, что в целом лучше иметь однородную среду (например, все приложения, написанные на Java, а не на Java и C++), однако часто бывает так, что вам нужно интегрироваться с устаревшими или сторонними компонентами, написанными на других языках, либо для из соображений стоимости или потому что другого выбора нет.
Обмен сообщениями является распространенным способом сделать это. Я рассматриваю HTTP под эгидой "обмена сообщениями", и почти каждый язык имеет библиотеку HTTP - что делает его хорошим выбором в качестве распространенного "языка" обмена сообщениями. При интеграции очень разнородной системы существуют специальные инструменты / платформы не только для интеграции компонентов, но и для интеграции систем обмена сообщениями (например, ESB).
Трудно сказать, хороший ли это дизайн, без дополнительной информации о требованиях приложения.
Следует также учитывать, что иногда интервьюеры предлагают странные схемы, чтобы увидеть реакцию кандидатов. Обычно я делаю это, когда нанимаю на роль, которая не является моей личной компетенцией, но там, где у меня был опыт (обычно это выясняется). Моя цель - узнать, сможет ли кандидат решить проблему лучше меня! Плохие кандидаты будут рабски принимать мое плохое решение. Лучшие кандидаты немедленно предложат лучшее решение. Лучшие кандидаты сравнят и сопоставят мое слабое решение с лучшим решением и выяснят, когда каждый вариант имеет смысл.
Я предполагаю, что внешний интерфейс Java был выбран по причинам переносимости. Я бы поспорил за браузерный интерфейс для достижения тех же целей, но, возможно, их UI/UX люди действительно любили Java.
Могут быть ограничения в отношении того, почему они должны сначала вызывать функции C++, а затем, помимо этого, они могли бы распределить требования клиентов. Как бы вы разработали решение, чтобы вы создали систему обмена сообщениями, которая взаимодействует с C++ на стороне сервера. Это рабочее решение в конце дня. Я не ожидал бы, что пользовательский интерфейс должен быть встроен в C++, потому что сторона сервера написана на C++, иногда вам нужно собирать различные технологии вместе, чтобы достичь своего решения.
Это работоспособный подход, я видел его в очень крупной компании (Fortune 20, если она есть), когда работал там в качестве подрядчика в 2005-2006 гг.
Когда я спросил почему, мне сказали:
- Нужен графический интерфейс Linux, java/SWING - респектабельный выбор. Я также думаю, что у них были некоторые разработчики Java, которые нуждались в работе.
- У них была большая, критичная для производительности кодовая база на C++/C.
- Они уже широко использовали обмен сообщениями и имели библиотеки для этого.
- Интерфейс обмена сообщениями, хотя и более дорогой в разработке, позволяет команде писать тестовые программы (например, заменять производственный GUI скриптом на Python).
Тем не менее, Qt и GTK/Gtkmm являются очень хорошими средами графического интерфейса, почему бы не использовать их?