Ho costruito un sistema, a partire da un'applicazione 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 avevo bisogno di avere un core in C ++ e progettato dall'inizio per essere multipiattaforma, incluso l'utilizzo di tipi di dimensioni (ad esempio int32 anziché int o long), in modo che potesse essere eseguito su Mac, Windows e UNIX (pre-Linux giorni).
Quando ho provato a cercare un buon ambiente dell'interfaccia utente multipiattaforma, ce n'erano alcuni che includevano XVT. Ho seguito il corso di formazione 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 e una sensazione nativi chiari sulla piattaforma (a partire dal Mac). Quindi ho rinunciato a questa idea e ho creato un'interfaccia utente nativa per Mac (PowerPlant) sulla parte superiore del nucleo portatile.
Un paio di anni dopo, ci siamo spostati su Windows (interfaccia utente in MFC). È stata più veloce la costruzione di un'interfaccia utente per la seconda volta, abbiamo mantenuto un Mac e l'interfaccia utente di Windows in parallelo per un breve periodo di tempo e poi sono passati a Windows. In seguito, il core è passato a varie versioni di UNIX e Linux, per consentirci di eseguire calcoli basati su server. Il core ha funzionato bene, con alcuni aggiustamenti quando lo abbiamo reso pronto per 64 bit.
Ora torno a utilizzare un Mac e vorrei poter tornare sul Mac, ma la dimensione e la complessità dell'app rendono questa scelta difficile. Ha ancora senso che gran parte di questa app sia un'app desktop: è come un ambiente CAD. Invece di costruire nuovamente l'interfaccia utente in un linguaggio C / C ++ specifico della piattaforma (e continuare a mantenere un'interfaccia utente basata su MFC), sono più incline a riscrivere l'intero stack in Java in modo che possa essere eseguito su più piattaforme.
Potrebbero esserci ancora motivi per eseguire un core non Java, ad esempio C ++ come abbiamo fatto. Ma vorrei essere in grado di eseguire test prestazionali precoci per vedere se fosse davvero necessario. E guarderei attentamente la mia interfaccia utente per vedere se potevo costruirla come un'app Web, connessa al nucleo tramite servizi Web, in modo da poter avere una vasta 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: quanto durerà la tua app? Quanto sarà complesso diventare? Se hai qualche idea su questo, considera la possibile longevità di tutte le librerie UI che stai utilizzando e la tua capacità nel tempo di aiutare le persone a mantenerle. Questo può essere difficile da considerare ora, ma vale la pena pensarci.
- Alex