Welche Faktoren sind bei der Auswahl der Laufzeit / Sprache für Windows-Desktopanwendungen zu berücksichtigen?

10

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

Deckard
quelle
2
Nach dem Kern des Lesens sollte der Fragentitel lauten: "Welche Faktoren sollte ich bei der Auswahl der Laufzeit / Sprache für eine Windows-Desktopanwendung berücksichtigen?" Konzentrieren Sie sich mehr auf den Entscheidungsaspekt Ihrer Frage. Das ist viel einfacher zu beantworten und weniger ansteckend als "Was soll ich verwenden?" - eine Art Frage, die der Titel zu implizieren scheint.
Spoike
@Spoike Toller Punkt, ich habe den Titel aktualisiert (etwas kürzer gemacht).
Deckard
1
Vielleicht hat dieser Link etwas über die Zukunft von Windows, was für euch sehr wichtig ist. IMHO- zdnet.com/blog/microsoft/…
Gulshan
Mac-Benutzer zu zwingen, Wine zu installieren und eine Windows-App auszuführen, ist dasselbe wie sie zu quälen.
Rechtsfalte

Antworten:

7

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

Joonas Pulakka
quelle
2
Inwiefern ist eine .NET-App eher eine native Windows-App als Java?
Rei Miyasaka
@Rei: insofern ist das .NET Framework nur für Windows verfügbar. Sicher, es gibt Mono, aber es bleibt immer zurück, und derzeit ist seine Zukunft ungewiss.
Tamás Szelei
1
@ Tamás Das ist eine ganz andere und zufällige Angelegenheit. Abgesehen von den ersten mehreren Code-Bytes in den EXE-Dateien, die "Dieses Programm kann nicht im DOS-Modus ausgeführt werden" ausgeben, ist das Programm immer noch vollständig Byte-Code. Eine Java-Bibliothek ist für Windows genauso nativ wie eine .NET-Bibliothek, auch wenn das Gegenteil aufgrund mangelnder Implementierung möglicherweise nicht der Fall ist.
Rei Miyasaka
4

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
3

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.

David Salamon
quelle
1

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.

Kevin Hsu
quelle
1

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.

ADIMO
quelle
SL ist fast tot ..
klm_
Microsoft glaubt das nicht. Persönlich denke ich, dass HTML5 die erste Wahl für Web-Apps ist, aber clientseitiges SL kann eine gute Technologie sein.
ADIMO
Ich würde mich auch für HTML5 entscheiden, da es von W3O unterstützt wird. Silverlight steht im Wettbewerb mit HTML5 und wenn es keine Nische bildet, wird es sterben, denke ich.
klm_
1

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.

  • Die Integration in COM ist schmerzhaft und COM + ist manchmal unmöglich (verschwendete Wochen damit, es mit der Windows Tablet-API zum Laufen zu bringen).
  • Hardware-Interaktion kann weh tun. Manchmal ist die API nur auf einer Plattform verfügbar (z. B. Kamera- / Scanner-Integration).
  • Die Interaktion mit lokalen Anwendungen kann ebenfalls schaden. Habe ich diesen COM-Schmerz erwähnt? Eine andere Möglichkeit (die wir tatsächlich verwendet haben) bestand darin, VBS-Skripte zu generieren und auszuführen, die eine Windows-Anwendung wie MapPoint oder eine proprietäre Mapping-App starten und mit Daten versorgen.
  • Installation und Desktop-Integration (Verknüpfungen, Deinstallationsprogramm, Startmenü) können ebenfalls schaden. Web Start ist sehr unzuverlässig. Alternativen kosten Sie entweder viel oder es fehlen einige Funktionen (wie die Update-Verteilung).

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.

Konrad Garus
quelle