J'ai construit un système, en commençant par une application de bureau, il y a 15 ans, lorsque Java était encore à ses balbutiements et n'était pas prêt à être utilisé pour créer ce type d'applications. Je savais que je devais avoir un noyau en C ++ et je l'ai conçu dès le départ pour être multiplateforme, y compris en utilisant des types de taille (par exemple int32 au lieu de int ou long), afin qu'il puisse fonctionner sur Mac, Windows et UNIX (pré-Linux journées).
À l'époque, j'ai essayé de chercher un bon environnement d'interface multiplateforme, il y en avait quelques-uns, y compris XVT. J'ai suivi la formation pour XVT et quand j'ai commencé à créer une vraie application, j'ai réalisé que je n'allais pas pouvoir créer un look and feel propre et natif sur la plateforme (à commencer par le Mac). J'ai donc abandonné cette idée et créé une interface utilisateur native pour Mac (PowerPlant) au-dessus du noyau portable.
Quelques années plus tard, nous sommes passés à Windows (interface utilisateur dans MFC). Il était plus rapide de créer une interface utilisateur la deuxième fois, nous avons maintenu une interface utilisateur Mac et Windows en parallèle pendant une courte période, puis nous sommes allés à Windows. Le noyau est ensuite passé à diverses versions d'UNIX et de Linux, pour nous permettre d'exécuter des calculs sur serveur. Le noyau a bien porté, avec quelques ajustements lorsque nous l'avons rendu 64 bits prêt.
Maintenant, je recommence à utiliser un Mac et j'aimerais que nous puissions revenir au Mac, mais la taille et la complexité de l'application en font un choix difficile. Il est toujours logique qu'une grande partie de cette application soit une application de bureau - c'est comme un environnement CAO. Mais plutôt que de reconstruire l'interface utilisateur dans un langage C / C ++ spécifique à la plate-forme (et de continuer à maintenir une interface utilisateur basée sur MFC), je suis plus enclin à réécrire la pile entière en Java afin qu'elle puisse s'exécuter sur plusieurs plates-formes.
Il peut toujours y avoir des raisons d'exécuter un noyau non Java, par exemple C ++ comme nous l'avons fait. Mais je voudrais exécuter des tests de performances précoces pour voir si cela était vraiment nécessaire. Et je regarderais attentivement mon interface utilisateur pour voir si je pouvais la construire en tant qu'application Web, connectée au noyau via des services Web, afin que je puisse avoir une gamme de clients - applications de bureau, applications mobiles, applications Web, etc. Si j'avais besoin d'un morceau en C ou C ++, pourrait-il être écrit sous une couche de Java? Ou en tant que service Web?
Une autre considération - combien de temps durera votre application? À quel point deviendra-t-il complexe? Si vous avez des idées à ce sujet, tenez compte de la longévité possible de toutes les bibliothèques d'interface utilisateur que vous utilisez et de votre capacité au fil du temps à aider les gens à les maintenir. Cela peut être difficile à considérer maintenant mais mérite réflexion.
- Alex