Meine Benutzer haben alle Windows. Einige von ihnen verwenden Linux oder einen Mac, aber wenn sie dies tun, können sie im Allgemeinen etwas wie Mono, Wine, Parallels oder Dual-Boot verwenden.
Mein Entwicklungsteam (einschließlich meiner selbst) verfügt über umfangreiche Erfahrung sowohl beim Schreiben von Swing-Anwendungen in Java als auch von Windows Forms in C #. "Umfangreich" bedeutet, dass wir zu beiden Laufzeiten drei Anwendungen entwickelt und ausgeliefert haben. Bei den Anwendungen handelt es sich um technische Analyseanwendungen, die sich nur geringfügig auf die Datenbankinteraktion auswirken, jedoch die benutzerdefinierten Benutzeroberflächen- und Datensatzgrößen stark beeinträchtigen.
Wir kommen an einen Punkt, an dem wir wirklich eine Entscheidung treffen möchten, auf welche Plattform wir uns von nun an konzentrieren sollen, da es zu einer Belastung wird, beide zu unterstützen (wenn Sie ein halbes Jahr in Swing arbeiten, ist das zu viel Aufwand um sich wieder an Windows Forms zu gewöhnen und umgekehrt) und wir möchten, dass jeder in unserem Team in der Lage ist, an allen unseren Anwendungen zu arbeiten.
- Windows Forms erfordert im Allgemeinen weniger Arbeit, um erkennbare Windows-Anwendungen zu erstellen. Keine Menge von Skinning und benutzerdefinierten Steuerelementen in Java hat dies im Laufe der Jahre gelöst. Gleichzeitig hatten wir noch nie einen Kunden, der die Swing-Anwendungen nicht verwenden konnte.
- Java hatte früher ein viel umfangreicheres Ökosystem in Bezug auf Bibliotheken und automatisierte Build-Tools, aber das ändert sich schnell (Java geht nicht aus, es ist eher so, dass .NET aufholt).
- Für den seltenen Fall, dass Multiplattform bevorzugt wird, schlägt Java .NET zweifellos. Mono ist wunderbar, aber es ist immer noch mehr Arbeit als Java.
Wenn wir uns für .NET entscheiden, können wir uns auf WPF konzentrieren, aber auch F # verwenden. Wenn wir uns für Java entscheiden, können wir uns auf RCP konzentrieren, aber auch Scala verwenden.
Hat jemand eine ähnliche Entscheidung treffen müssen? Wenn ja, was war es und was hat Sie am meisten beeinflusst? Irgendwelche Top-Bedenken, die ich vermisse?
(Bitte beachten Sie: Es gibt bereits einige ähnliche Fragen zu Programmers.SE, die jedoch entweder nicht konstruktiv oder aus einem anderen Blickwinkel sind.)
quelle
Antworten:
Wir haben uns für Java (Swing) und einige native Teile über JNI entschieden. Während die kommerzielle Nachfrage nach Multiplattformität heute möglicherweise gering ist, kann sich die Situation in 5 Jahren ändern, und der Lebenszyklus der App (eine wissenschaftliche Mess-App) wird eher 10+ Jahre betragen (der heute noch verwendete C ++ - Vorgänger hat dies getan) Quelldateien vom 1991). Wie Sie geschrieben haben, schlägt Java .NET in Nicht-Windows-Umgebungen zweifellos. Wenn wir jemals von Windows wechseln müssen, müssen nur einige native Teile neu kompiliert, möglicherweise das Erscheinungsbild der GUI optimiert und überprüft werden funktioniert alles.
Wenn Sie sicher sind, dass Sie nur Windows verwenden und Ihre App nur wenige Jahre leben wird, wird .NET möglicherweise bevorzugt - es sieht aus und verhält sich eher wie eine native App, weil es so ist. Aber als langfristige Investition vertraue ich Java mehr. Swing sieht vielleicht etwas weniger als perfekt aus, die Startzeit kann länger sein, alles ist aufgrund der Multiplattform-Abstraktionsschicht etwas suboptimal, aber zumindest "funktioniert es".
quelle
Möglicherweise möchten Sie das IKVM-Projekt in Betracht ziehen, mit dem Sie Java-Code in einer .NET-Welt verwenden können. Sie können dann die Vorteile eines Java-Backends nutzen, während Sie meines Wissens einen dünnen Frontlayer in Swing oder WinForms haben können.
http://www.ikvm.net/
Ich habe gehört, dass andere dies verwendet haben, um eine Open-Source-Verbindungsbibliothek zu verwenden, die in Java aus .NET geschrieben wurde, anstatt die umständliche .NET-Version verwenden zu müssen.
quelle
Auf MSDN gibt es eine Ressource, die für Sie nützlich sein könnte: http://msdn.microsoft.com/en-us/gg715299.aspx .
Wenn Sie zum Ende der Seite gehen, finden Sie eine Reihe von Whitepapers, die Java und .NET konzeptionell vergleichen. Da es sich um MSDN handelt, ist es natürlich auf .NET ausgerichtet, aber die Ressourcen sind immer noch sehr nützlich.
quelle
Ich habe auch darüber nachgedacht und festgestellt, dass die Antwort von der Art des Projekts und dem abhängt, was Sie darüber vorhersehen können.
Manchmal ist es eine gute Sache, die One Codebase für alle Plattformen zu erstellen. Sie erhalten ein gewisses Maß an UI-Konsistenz mit weniger Gesamtcode. Ich denke, die Vor- und Nachteile liegen auf der Hand, also werde ich das überspringen.
Es gibt Zeiten, in denen es besser ist, zwei nativ geschriebene Codebasen zu haben. Wenn das Schreiben Ihrer App in WPF beispielsweise für .NET elegant ist und das Schreiben in beispielsweise Cocoa für Mac OS elegant ist, ist der resultierende Code möglicherweise kleiner als die Verwendung von beispielsweise Java oder Mono (was nicht der Fall ist) WPF). In diesem Fall erzielen Sie möglicherweise bessere Ergebnisse mit weniger Code.
Eine letzte Überlegung ist vielleicht, Ihre App als HTML5-Anwendung oder sogar als Chrome-Erweiterung zu verwenden, aber das könnte zu links sein.
quelle
Haben Sie über Silverlight nachgedacht ? Es kann eine gute Wahl sein, um auch Windows Desktop-Anwendungen (von SL4 +) zu erstellen und auf Mac gut zu funktionieren.
quelle
Als Vollzeit-Java-Entwickler kann ich Ihnen sagen, dass die plattformübergreifende Kompatibilität zwar erstaunlich ist, aber jede native Integration die Hölle ist .
Ich hatte aus diesem Grund immer viele Probleme und bin manchmal gescheitert. Sie brauchen es vielleicht nicht, aber manchmal stolpere ich darüber und es tut normalerweise weh.
Versteh mich nicht falsch. Ich bin ein Java-Entwickler und möchte es nicht flammen. Ich sage nur, wenn Sie den Verdacht haben , dass Sie eines der oben genannten Dinge benötigen, kann dies weh tun und Sie könnten mit .net besser dran sein . Zumindest ist es ein Argument, das Sie berücksichtigen sollten.
quelle