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).
źródło
Odpowiedzi:
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”.
źródło
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
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.
źródło
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.
źródło
Czy zastanawiałeś się nad Silverlight ? Może być dobrym wyborem do zbudowania aplikacji Windows Desktop (od SL4 +) i działa dobrze na Macu.
źródło
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.
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ę.
źródło