Mes utilisateurs ont tous Windows. Certains d'entre eux utilisent Linux ou un Mac, mais s'ils le font, ils sont généralement capables d'utiliser quelque chose comme Mono, Wine, Parallels ou dual-boot.
Mon équipe de développement (y compris moi-même) possède une vaste expérience à la fois dans l'écriture d'applications Swing en Java ainsi que dans Windows Forms en C #. "Extensif" signifie que nous avons développé et expédié plus de trois applications sur les deux runtimes. Les applications sont des applications d'analyse technique, si douces pour l'interaction avec la base de données, mais lourdes pour l'interface utilisateur personnalisée et la taille des ensembles de données.
Nous arrivons au point où nous voulons vraiment prendre une décision quant à la plate-forme sur laquelle se concentrer à partir de maintenant, car cela devient un fardeau pour soutenir les deux (si vous travaillez dans Swing pendant six mois, c'est trop de tracas pour nous habituer à nouveau aux formulaires Windows et inversement) et nous voulons que tous les membres de notre équipe soient capables de travailler sur toutes nos applications.
- Windows Forms demande généralement moins de travail pour créer des applications Windows reconnaissables. Aucune quantité de skinning et de contrôles personnalisés en Java n'a résolu cela au fil des ans. Dans le même temps, nous n'avons jamais eu de client qui ne pouvait pas utiliser les applications Swing.
- Java avait un écosystème beaucoup plus riche en termes de bibliothèques et d'outils de construction automatisés, mais cela change rapidement (Java ne descend pas, c'est plus que .NET rattrape son retard).
- Dans les rares cas où la multiplateforme est préférée, Java bat .NET haut la main. Mono est merveilleux, mais c'est encore plus de travail que Java.
Si nous choisissons .NET, nous pouvons commencer à nous concentrer sur WPF, mais aussi commencer à utiliser F #. Si nous choisissons Java, nous pouvons commencer à nous concentrer sur RCP, mais aussi à utiliser Scala.
Quelqu'un a-t-il dû prendre une décision similaire? Si oui, qu'est-ce que c'était et qu'est-ce qui vous a le plus influencé? Y a-t-il des préoccupations majeures qui me manquent?
(Veuillez noter: il y a déjà des questions similaires sur Programmers.SE, mais elles sont soit non constructives, soit sous un angle différent.)
la source
Réponses:
Nous sommes allés pour Java (Swing) plus quelques parties natives via JNI. Alors que la demande commerciale de multiplateforme peut être marginale aujourd'hui, la situation peut être différente dans 5 ans, et le cycle de vie de l'application (une application de mesure scientifique) ressemblera davantage à plus de 10 ans (son prédécesseur C ++, toujours utilisé aujourd'hui, a fichiers source datés de 1991). Comme vous l'avez écrit, Java bat .NET haut la main dans les environnements non-Windows, et si nous devons jamais quitter Windows, il suffit de recompiler certaines parties natives, peut-être d'affiner l'apparence de l'interface graphique et de vérifier cela tout fonctionne.
Si vous êtes sûr que vous ne serez que Windows et que votre application ne vivra que quelques années, alors .NET peut être préféré - il ressemble et se comporte plus comme une application native car il l'est. Mais en tant qu'investissement à long terme, je fais davantage confiance à Java. Le swing peut sembler un peu moins que parfait, le temps de démarrage peut être plus long, tout est un peu sous-optimal en raison de la couche d'abstraction multiplateforme, mais au moins cela "fonctionne juste".
la source
Une chose que vous voudrez peut-être considérer est le projet IKVM qui vous permet d'utiliser du code Java dans un monde .NET. Vous pouvez ensuite bénéficier des avantages d'un backend Java, tandis que - à ma connaissance - vous pouvez avoir une couche frontale mince dans Swing ou WinForms.
http://www.ikvm.net/
J'ai entendu dire que d'autres l'ont utilisé pour utiliser une bibliothèque de connexion open source écrite en Java à partir de .NET au lieu d'avoir à utiliser la lourde version .NET.
la source
Il existe une ressource sur MSDN qui pourrait vous être utile: http://msdn.microsoft.com/en-us/gg715299.aspx .
Si vous allez au bas de la page, vous trouverez un tas de livres blancs qui comparent conceptuellement Java et .NET. Bien sûr, car il est sur MSDN, il est orienté vers .NET, mais les ressources sont toujours très utiles.
la source
J'ai également réfléchi à cela, et j'ai trouvé que la réponse dépend du type de projet et de ce que vous pouvez en prévoir.
Parfois, la création de la base de code unique pour desservir toutes les plates-formes est une bonne chose - vous obtenez un certain niveau de cohérence de l'interface utilisateur avec moins de code global. Je pense que les avantages et les inconvénients sont évidents, alors je vais sauter cela.
Il y a des moments où il est préférable d'avoir 2 bases de code écrites en natif. Si, par exemple, écrire votre application dans WPF est élégant pour .NET, et l'écrire, par exemple, Cocoa est élégant pour Mac OS, le code résultant peut en fait être plus petit que d'utiliser, disons, Java ou Mono (qui n'a pas WPF). Dans ce cas, vous obtiendrez peut- être de meilleurs résultats avec moins de code.
Une dernière considération est peut-être de faire votre application en tant qu'application HTML5, ou même en tant qu'extension Chrome, mais cela pourrait être un champ trop à gauche.
la source
Avez-vous pensé à Silverlight ? Il peut être un bon choix pour créer également une application Windows Desktop (à partir de SL4 +) et fonctionner correctement sur Mac.
la source
En tant que développeur Java à plein temps, je peux vous dire que même si la compatibilité multiplateforme est incroyable, chaque intégration native est un enfer .
J'ai toujours eu beaucoup de problèmes, et parfois échoué, sur ce terrain. Vous n'en avez peut-être pas besoin, mais parfois je tombe dessus et ça fait généralement mal.
Ne vous méprenez pas. Je suis un développeur Java et je ne veux pas le mettre à feu. Je dis seulement que si vous pensez que vous aurez besoin de tout ce qui précède, cela peut faire mal et vous pourriez être mieux avec .net . C'est au moins un argument que vous devez prendre en considération.
la source