Criei um sistema, começando com um aplicativo de desktop, 15 anos atrás, quando o Java ainda estava em sua infância e não estava pronto para ser usado na criação desses tipos de aplicativos. Eu sabia que precisava ter um núcleo em C ++ e o projetei desde o início para ser multiplataforma, incluindo o uso de tipos de tamanho (por exemplo, int32 em vez de int ou long), para que pudesse rodar em Mac, Windows e UNIX (pré-Linux dias).
No momento em que tentei procurar um bom ambiente de interface do usuário entre plataformas, havia alguns que incluíam o XVT. Fiz o treinamento para o XVT e, quando comecei a criar um aplicativo real, percebi que não conseguiria criar uma aparência limpa e nativa na plataforma (começando no Mac). Então desisti dessa ideia e construí uma interface de usuário nativa do Mac (PowerPlant) sobre o núcleo portátil.
Alguns anos depois, mudamos para o Windows (UI no MFC). Foi mais rápido a criação de uma interface de usuário na segunda vez, mantivemos uma interface de usuário do Mac e do Windows em paralelo por um curto período de tempo e depois fomos para o Windows. Mais tarde, o núcleo mudou-se para vários tipos de UNIX e Linux, para nos permitir executar cálculos baseados em servidor. O núcleo funcionou bem, com alguns ajustes quando o preparamos para 64 bits.
Agora, voltei a usar um Mac e gostaria que pudéssemos voltar ao Mac, mas o tamanho e a complexidade do aplicativo tornam essa uma escolha difícil. Ainda faz sentido que grande parte desse aplicativo seja um aplicativo de desktop - é como um ambiente CAD. Mas, em vez de criar a interface do usuário novamente em uma linguagem C / C ++ específica da plataforma (e continuar mantendo uma interface do usuário baseada em MFC), estou mais inclinado a reescrever a pilha inteira em Java para que ela possa ser executada em várias plataformas.
Ainda pode haver razões para executar um núcleo não Java, digamos C ++, como fizemos. Mas eu gostaria de executar testes de desempenho iniciais para ver se isso era realmente necessário. E eu olhava atentamente minha interface do usuário para ver se poderia construí-la como um aplicativo da Web, conectado ao núcleo por meio de serviços da Web, para que eu pudesse ter uma variedade de clientes - aplicativos de desktop, aplicativos móveis, aplicativos da Web etc. Se eu precisasse de uma peça em C ou C ++, ela poderia ser escrita em uma camada de Java? Ou como um serviço da web?
Outra consideração: quanto tempo seu aplicativo estará disponível? Quão complexo ele se tornará? Se você tiver alguma idéia sobre isso, considere a possível longevidade de qualquer biblioteca de interface do usuário que esteja usando e sua capacidade ao longo do tempo de que as pessoas ajudem a mantê-las. Isso pode ser difícil de considerar agora, mas vale a pena pensar.
- Alex