Ich habe vor 15 Jahren ein System erstellt, beginnend mit einer Desktop-App, als Java noch in den Kinderschuhen steckte und nicht für die Erstellung solcher Apps bereit war. Ich wusste, dass ich einen Kern in C ++ haben musste, und habe ihn von Anfang an plattformübergreifend gestaltet, einschließlich der Verwendung von Größen (z. B. int32 anstelle von int oder long), damit er unter Mac, Windows und UNIX (vor Linux) ausgeführt werden kann Tage).
Zu der Zeit, als ich versuchte, nach einer guten plattformübergreifenden UI-Umgebung zu suchen, gab es einige, darunter XVT. Ich habe das Training für XVT durchlaufen und als ich anfing, eine echte App zu erstellen, wurde mir klar, dass ich auf der Plattform (beginnend mit dem Mac) kein sauberes, natives Erscheinungsbild erstellen konnte. Also gab ich diese Idee auf und baute eine native Mac-Benutzeroberfläche (PowerPlant) auf dem tragbaren Kern.
Einige Jahre später wechselten wir zu Windows (UI in MFC). Beim zweiten Mal war es schneller, eine Benutzeroberfläche zu erstellen. Wir haben für kurze Zeit eine Mac- und eine Windows-Benutzeroberfläche parallel gewartet und sind dann zu Windows übergegangen. Der Kern wechselte später zu verschiedenen UNIX- und Linux-Varianten, damit wir serverbasierte Berechnungen ausführen können. Der Core hat sich gut portiert, mit einigen Anpassungen, als wir ihn 64-Bit-fähig gemacht haben.
Jetzt benutze ich wieder einen Mac und ich wünschte, wir könnten zum Mac zurückkehren, aber die Größe und Komplexität der App machen dies zu einer schwierigen Wahl. Es ist immer noch sinnvoll, dass ein Großteil dieser App eine Desktop-App ist - es ist wie eine CAD-Umgebung. Aber anstatt die Benutzeroberfläche erneut in einer plattformspezifischen C / C ++ - Sprache zu erstellen (und weiterhin eine MFC-basierte Benutzeroberfläche beizubehalten), bin ich eher geneigt, den gesamten Stapel in Java neu zu schreiben, damit er auf mehreren Plattformen ausgeführt werden kann.
Es kann immer noch Gründe geben, einen Nicht-Java-Kern auszuführen, beispielsweise C ++. Aber ich würde gerne frühzeitige Leistungstests durchführen, um zu sehen, ob dies wirklich erforderlich ist. Und ich würde meine Benutzeroberfläche sorgfältig prüfen, um festzustellen, ob ich sie als Web-App erstellen könnte, die über Webdienste mit dem Kern verbunden ist, sodass ich eine Reihe von Clients haben kann - Desktop-Apps, mobile Apps, Web-Apps usw. Wenn ich ein Stück in C oder C ++ brauchte, könnte es unter einer Java-Ebene geschrieben werden? Oder als Webdienst?
Noch eine Überlegung - wie lange wird Ihre App noch verfügbar sein? Wie komplex wird es werden? Wenn Sie Ideen dazu haben, sollten Sie die mögliche Langlebigkeit der von Ihnen verwendeten UI-Bibliotheken und Ihre Fähigkeit im Laufe der Zeit berücksichtigen, dass Mitarbeiter bei deren Wartung helfen. Dies mag jetzt schwer zu überlegen sein, ist aber einen Gedanken wert.
-- Alex