Jakie czynniki należy wziąć pod uwagę przy wyborze środowiska wykonawczego / języka dla aplikacji komputerowych Windows?

10

Wszyscy moi użytkownicy mają system Windows. Niektóre z nich używają Linuksa lub Maca, ale jeśli tak, zazwyczaj są w stanie używać czegoś takiego jak Mono, Wine, Parallels lub dual-boot.

Mój zespół programistów (w tym ja) ma duże doświadczenie zarówno w pisaniu aplikacji Swing w Javie, jak i Windows Forms w C #. „Rozbudowany” oznacza, że ​​opracowaliśmy i wysłaliśmy ponad trzy aplikacje w obu środowiskach wykonawczych. Aplikacje te są aplikacjami do analizy technicznej, łagodnymi dla interakcji z bazą danych, ale obciążającymi niestandardowy interfejs użytkownika i rozmiary zestawów danych.

Dochodzimy do momentu, w którym naprawdę chcemy podjąć decyzję, na której platformie należy się skupić, ponieważ jest to trudne do obsługi obu (jeśli pracujesz w Swing od pół roku, to zbyt wiele problemów aby ponownie przyzwyczaić się do formularzy Windows Forms i na odwrót) i chcemy, aby wszyscy w naszym zespole mogli pracować nad wszystkimi naszymi aplikacjami.

  • Formularze Windows zazwyczaj wymagają mniej pracy, aby tworzyć rozpoznawalne aplikacje Windows. Przez wiele lat żadna ilość skórkowania i niestandardowych elementów sterujących w Javie nie rozwiązała tego problemu. Jednocześnie nigdy nie mieliśmy klienta, który nie mógłby korzystać z aplikacji Swing.
  • Java miała znacznie bogatszy ekosystem pod względem bibliotek i automatycznych narzędzi do kompilacji, ale to się szybko zmienia (Java się nie psuje, chodzi o to, że .NET nadrabia zaległości).
  • W rzadkich przypadkach, w których preferowana jest platforma wieloplatformowa, Java zdecydowanie wyprzedza platformę .NET. Mono jest cudowne, ale wciąż wymaga więcej pracy niż Java.

Jeśli wybierzemy .NET, możemy zacząć skupiać się na WPF, ale także zacząć używać F #. Jeśli wybierzemy Javę, możemy zacząć skupiać się na RCP, ale także zacząć używać Scali.

Czy ktoś musiał podjąć podobną decyzję? Jeśli tak, co to było i co miało na ciebie największy wpływ? Jakieś najważniejsze obawy, których mi brakuje?

(Uwaga: istnieją już podobne pytania na Programmers.SE, ale są albo niekonstruktywne, albo pod innym kątem).

Deckard
źródło
2
Z treści czytania uważam, że tytuł pytania powinien brzmieć „Jakie czynniki powinienem przemyśleć, wybierając środowisko wykonawcze / język dla aplikacji komputerowej Windows?” , koncentrując się bardziej na aspekcie decyzyjnym pytania. O wiele łatwiej jest odpowiedzieć i mniej zaraźliwy niż „Czego powinienem użyć?” - rodzaj pytania, które wydaje się sugerować tytuł.
Spoike
@Spoike Świetny punkt, zaktualizowałem tytuł (nieco go skróciłem).
Deckard
1
Może być ten link ma coś na temat przyszłości systemu Windows, który jest bardzo ważny dla was IMHO- zdnet.com/blog/microsoft/...
Gulshan
Zmuszanie użytkowników komputerów Mac do instalowania Wine i uruchamiania aplikacji Windows jest tym samym, co torturowanie ich.
prawej

Odpowiedzi:

7

Poszliśmy na Javę (Swing) i niektóre natywne części za pośrednictwem JNI. Chociaż komercyjne zapotrzebowanie na wieloplatformowość może być dziś marginalne, sytuacja może się różnić za 5 lat, a cykl życia aplikacji (naukowej aplikacji pomiarowej) będzie bardziej zbliżony do ponad 10 lat (jej nadal używany poprzednik C ++ pliki źródłowe z 1991 roku). Jak napisałeś, Java pokonuje platformę .NET w środowisku innym niż Windows, a jeśli kiedykolwiek będziemy musieli przejść z Windows, to tylko kwestia ponownej kompilacji niektórych natywnych części, być może dopracowania wyglądu GUI i sprawdzenia, czy wszystko działa poprawnie.

Jeśli masz pewność, że będziesz korzystać tylko z systemu Windows, a Twoja aplikacja będzie dostępna za kilka lat, może być preferowany .NET - wygląda i zachowuje się bardziej jak aplikacja natywna, ponieważ tak jest. Ale jako długoterminowa inwestycja bardziej ufam Javie. Huśtawka może wyglądać trochę mniej niż idealnie, czas uruchamiania może być dłuższy, wszystko jest nieco nieoptymalne z powodu wieloplatformowej warstwy abstrakcji, ale przynajmniej „po prostu działa”.

Joonas Pulakka
źródło
2
W jaki sposób aplikacja .NET jest bardziej natywną aplikacją Windows niż Java?
Rei Miyasaka,
@Rei: ponieważ platforma .NET jest dostępna tylko dla systemu Windows. Oczywiście, jest mono, ale zawsze pozostaje w tyle, a obecnie jego przyszłość jest, cóż, niepewna.
Tamás Szelei
1
@ Tamás To zupełnie inna i przypadkowa sprawa. Oprócz pierwszych kilku bajtów kodu w .exes, które wypisują „Ten program nie może być uruchomiony w trybie DOS.”, Program jest nadal całkowicie bajtowy. Biblioteka Java jest tak samo natywna dla systemu Windows, jak biblioteka .NET, nawet jeśli odwrotność może być nieprawdziwa z powodu braku implementacji.
Rei Miyasaka,
4

Warto rozważyć projekt IKVM, który umożliwia korzystanie z kodu Java w świecie .NET. Możesz wtedy uzyskać korzyści z backendu Java, a - o ile mi wiadomo - możesz mieć cienką warstwę w Swing lub WinForms.

http://www.ikvm.net/

Słyszałem, że inni używali tego do korzystania z biblioteki połączeń open source napisanej w Javie z .NET zamiast konieczności korzystania z niewygodnej wersji .NET.


źródło
3

W witrynie MSDN znajduje się zasób, który może Ci się przydać: http://msdn.microsoft.com/en-us/gg715299.aspx .

Jeśli przejdziesz na dół strony, znajdziesz kilka oficjalnych dokumentów, które porównują koncepcyjnie Java i .NET. Oczywiście, ponieważ znajduje się w MSDN, jest stronniczy w kierunku .NET, ale zasoby są nadal bardzo przydatne.

David Salamon
źródło
1

Zastanawiałem się nad tym i znalazłem odpowiedź zależy od rodzaju projektu i tego, co możesz przewidzieć.

Czasami tworzenie One Codebase do obsługi wszystkich platform jest dobrą rzeczą - uzyskujesz pewien poziom spójności interfejsu użytkownika przy mniejszym ogólnym kodzie. Myślę, że zalety i wady są oczywiste, więc pominę to.

Są chwile, w których posiadanie 2 natywnie napisanych baz kodu jest lepsze. Jeśli na przykład pisanie aplikacji w WPF jest eleganckie dla platformy .NET, a pisanie w, powiedzmy, Cocoa jest eleganckie dla systemu Mac OS, wynikowy kod może być w rzeczywistości mniejszy niż przy użyciu, powiedzmy, Java lub Mono (który nie ma WPF). W tym przypadku, można uzyskać lepsze wyniki przy mniejszym kodu.

Ostatnim rozważaniem może być wykonanie aplikacji jako aplikacji HTML5 lub nawet rozszerzenia Chrome, ale może to być zbyt puste pole.

Kevin Hsu
źródło
1

Czy zastanawiałeś się nad Silverlight ? Może być dobrym wyborem do zbudowania aplikacji Windows Desktop (od SL4 +) i działa dobrze na Macu.

ADIMO
źródło
SL prawie nie żyje ..
klm_
Microsoft tak nie uważa. Osobiście uważam, że html5 jest pierwszym wyborem dla aplikacji internetowej, ale SL po stronie klienta może być dobrą technologią.
ADIMO,
Wybrałbym również HTML5, ponieważ jest obsługiwany przez W3O. Silverlight konkuruje z HTML5 i myślę, że jeśli nie stworzy niszy, umrze.
klm_
1

Jako pełnoetatowy programista Java mogę powiedzieć, że chociaż zgodność między platformami jest niesamowita, każda natywna integracja jest piekłem .

Na tej podstawie zawsze miałem wiele problemów, a czasem nie. Możesz go nie potrzebować, ale czasem się na niego natknę i zwykle boli.

  • Integracja z COM jest bolesna, a COM + jest czasami niemożliwy (stracone tygodnie próbują go uruchomić z Windows Tablet API).
  • Interakcja sprzętowa może zaszkodzić. Czasami API jest dostępne tylko na jednej platformie (np. Integracja kamery / skanera).
  • Może również zaszkodzić interakcja z lokalnymi aplikacjami. Czy wspomniałem o bólu COM? Cóż, innym sposobem (którego faktycznie używaliśmy) było generowanie i wykonywanie skryptów VBS, które uruchamiają aplikację Windows, taką jak MapPoint lub jakąś zastrzeżoną aplikację do mapowania i karmią ją danymi.
  • Instalacja i integracja pulpitu (skróty, deinstalator, menu Start) również mogą zaszkodzić. Web Start jest bardzo zawodny. Alternatywy albo drogo kosztują, albo brakuje niektórych funkcji (takich jak dystrybucja aktualizacji).

Nie zrozum mnie źle. Jestem programistą Java i nie zamierzam go rozpalać. Mówię tylko, że jeśli podejrzewasz, że będziesz potrzebować któregokolwiek z powyższych, może to boleć i może być lepiej z .net . Przynajmniej jest to argument, który należy wziąć pod uwagę.

Konrad Garus
źródło