Я создал систему, начав с настольного приложения, 15 лет назад, когда Java еще только начинала развиваться и не была готова для использования при создании приложений такого типа. Я знал, что мне нужно иметь ядро в C ++ и с самого начала проектировал его как кроссплатформенное, включая использование размерных типов (например, int32 вместо int или long), чтобы оно могло работать на Mac, Windows и UNIX (до Linux) дней).
В то время, когда я пытался найти хорошую среду кроссплатформенного интерфейса, их было несколько, включая XVT. Я прошел обучение для XVT, и когда я начал создавать настоящее приложение, я понял, что не смогу создать чистый, естественный вид на платформе (начиная с Mac). Поэтому я отказался от этой идеи и создал собственный интерфейс Mac (PowerPlant) поверх портативного ядра.
Пару лет спустя мы перешли на Windows (пользовательский интерфейс в MFC). Во второй раз процесс создания пользовательского интерфейса был быстрее, мы некоторое время поддерживали параллельный интерфейс Mac и Windows, а затем перешли на Windows. Позже ядро перешло на различные разновидности UNIX и Linux, что позволило нам запускать серверные вычисления. Ядро работало хорошо, с некоторыми изменениями, когда мы сделали его готовым для 64-битной системы.
Теперь я вернулся к использованию Mac и хотел бы, чтобы мы могли вернуться к Mac, но размер и сложность приложения делают этот выбор трудным. Для большей части этого приложения все еще имеет смысл быть настольным приложением - это похоже на среду САПР. Но вместо того, чтобы снова создавать пользовательский интерфейс на платформенно-зависимом языке C / C ++ (и продолжать поддерживать пользовательский интерфейс на основе MFC), я более склонен переписывать весь стек в Java, чтобы он мог работать на нескольких платформах.
Могут все еще быть причины для запуска не-Java ядра, скажем C ++, как мы это сделали. Но я хотел бы провести ранние тесты производительности, чтобы увидеть, действительно ли это необходимо. И я бы внимательно посмотрел на свой пользовательский интерфейс, чтобы посмотреть, смогу ли я создать его как веб-приложение, подключенное к ядру через веб-сервисы, чтобы у меня был целый ряд клиентов - настольные приложения, мобильные приложения, веб-приложения и т. Д. Если мне нужен кусок в C или C ++, может ли он быть написан под слоем Java? Или как веб-сервис?
Еще одно соображение - как долго будет ваше приложение? Насколько сложным это будет расти? Если у вас есть какие-либо идеи по этому поводу, подумайте о возможной долговечности любых библиотек пользовательского интерфейса, которые вы используете, и о своей способности со временем помогать людям поддерживать их. Это может быть трудно рассмотреть сейчас, но стоит подумать.
Алекс