Ho creato un sistema, a partire da un'app desktop, 15 anni fa quando Java era ancora agli inizi e non era pronto per l'uso nella creazione di questo tipo di app. Sapevo che dovevo avere un core in C ++ e l'ho progettato fin dall'inizio per essere multipiattaforma, incluso l'utilizzo di tipi di dimensioni (ad esempio int32 anziché int o long), in modo che potesse funzionare su Mac, Windows e UNIX (pre-Linux giorni).
All'epoca ho provato a cercare un buon ambiente UI multipiattaforma, ce n'erano alcuni tra cui XVT. Ho seguito l'addestramento per XVT e quando ho iniziato a creare un'app reale, mi sono reso conto che non sarei stato in grado di creare un aspetto pulito e nativo sulla piattaforma (a partire dal Mac). Così ho rinunciato a quell'idea e ho creato un'interfaccia utente nativa per Mac (PowerPlant) sul core portatile.
Un paio di anni dopo, siamo passati a Windows (UI in MFC). La seconda volta è stato più veloce creare un'interfaccia utente, abbiamo mantenuto per un breve periodo un'interfaccia utente parallela per Mac e Windows e poi siamo passati a Windows. Il core in seguito si è spostato su varie versioni di UNIX e Linux, per consentirci di eseguire calcoli basati su server. Il core ha funzionato bene, con alcune modifiche quando lo abbiamo reso pronto per 64 bit.
Ora sono tornato a utilizzare un Mac e vorrei poter tornare sul Mac, ma le dimensioni e la complessità dell'app rendono questa una scelta difficile. Ha ancora senso che gran parte di questa app sia un'app desktop - è come un ambiente CAD. Ma piuttosto che ricostruire l'interfaccia utente in un linguaggio C / C ++ specifico della piattaforma (e continuare a mantenere un'interfaccia utente basata su MFC), sono più propenso a riscrivere l'intero stack in Java in modo che possa funzionare su più piattaforme.
Potrebbero esserci ancora motivi per eseguire un core non Java, ad esempio C ++. Ma vorrei voler eseguire i primi test delle prestazioni per vedere se era davvero necessario. E guarderei attentamente la mia interfaccia utente per vedere se potevo costruirla come un'app Web, connessa al core tramite servizi Web, in modo da poter avere una gamma di client: app desktop, app mobili, app Web, ecc. Se avessi bisogno di un pezzo in C o C ++, potrebbe essere scritto sotto uno strato di Java? O come servizio web?
Un'altra considerazione: per quanto tempo rimarrà la tua app? Quanto diventerà complesso? Se hai qualche idea al riguardo, considera la possibile longevità di tutte le librerie dell'interfaccia utente che stai utilizzando e la tua capacità nel tempo di avere persone che le aiutano a mantenerle. Questo può essere difficile da considerare ora, ma vale la pena pensarci.
- Alex