Quels facteurs prendre en compte lors du choix du runtime / de la langue pour les applications de bureau Windows?

10

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.)

Deckard
la source
2
D'après l'essentiel de la lecture, je pense que le titre de la question devrait être "Quels facteurs dois-je prendre en compte lors du choix du runtime / de la langue pour une application de bureau Windows?" , en se concentrant davantage sur l'aspect décisionnel de votre question. C'est beaucoup plus facile à répondre et moins infectieux que "Que dois-je utiliser?" - sorte de question que le titre semble impliquer.
Spoike
@Spoike Excellent point, j'ai mis à jour le titre (je l'ai raccourci un peu).
Deckard
1
Peut-être que ce lien a quelque chose sur l'avenir de Windows, ce qui est très important pour vous les gars IMHO- zdnet.com/blog/microsoft/…
Gulshan
Forcer les utilisateurs Mac à installer Wine et à exécuter une application Windows revient à les torturer.
droite le

Réponses:

7

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".

Joonas Pulakka
la source
2
En quoi une application .NET est-elle plus une application Windows native que Java?
Rei Miyasaka
@Rei: en ce que le framework .NET n'est disponible que pour Windows. Bien sûr, il y a du mono, mais il est toujours à la traîne, et actuellement son avenir est, bien, incertain.
Tamás Szelei
1
@ Tamás C'est une question complètement différente et accessoire. Mis à part les premiers octets de code dans les .exes qui affichent "Ce programme ne peut pas être exécuté en mode DOS.", Le programme est toujours entièrement en octet. Une bibliothèque Java est tout aussi native de Windows qu'une .NET, même si l'inverse peut être faux en raison d'un manque d'implémentation.
Rei Miyasaka
4

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
3

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.

David Salamon
la source
1

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.

Kevin Hsu
la source
1

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.

ADIMO
la source
SL est presque mort ..
klm_
Microsoft ne le pense pas. Personnellement, je pense que html5 est le premier choix pour les applications Web, mais SL côté client peut être une bonne technologie.
ADIMO
Je choisirais également HTML5, car il est pris en charge par W3O. Silverlight est en concurrence avec HTML5 et s'il ne fait pas de niche, il mourra, je pense.
klm_
1

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.

  • L'intégration avec COM est pénible, et COM + est parfois impossible (semaines perdues à essayer de le faire fonctionner avec Windows Tablet API).
  • L'interaction matérielle peut nuire. Parfois, l'API n'est disponible que sur une seule plate-forme (par exemple, intégration caméra / scanner).
  • L'interaction avec les applications locales peut également nuire. Ai-je mentionné cette douleur COM? Eh bien, une autre façon (que nous avons réellement utilisée) était de générer et d'exécuter des scripts VBS qui lancent une application Windows telle que MapPoint ou une application de cartographie propriétaire et l'alimentent avec des données.
  • L'installation et l'intégration du bureau (raccourcis, programme de désinstallation, menu Démarrer) peuvent également être nuisibles. Web Start est très peu fiable. Les alternatives vous coûtent cher ou manquent de certaines fonctionnalités (comme la distribution des mises à jour).

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.

Konrad Garus
la source