Faktor apa yang perlu dipertimbangkan ketika memilih runtime / bahasa untuk aplikasi desktop Windows?

10

Semua pengguna saya memiliki Windows. Beberapa dari mereka menggunakan Linux atau Mac, tetapi jika mereka melakukannya mereka umumnya dapat menggunakan sesuatu seperti Mono, Wine, Parallels atau dual-boot.

Tim pengembangan saya (termasuk saya) memiliki pengalaman luas baik dalam menulis aplikasi Swing di Java maupun Formulir Windows di C #. "Luas" berarti kami telah mengembangkan dan mengirim lebih dari tiga aplikasi pada kedua runtime. Aplikasi adalah aplikasi analisis teknis, sangat ringan pada interaksi basis data, tetapi berat pada UI khusus dan ukuran kumpulan data.

Kami sampai pada titik di mana kami benar-benar ingin membuat keputusan tentang platform mana yang menjadi fokus mulai sekarang, karena itu menjadi beban untuk mendukung keduanya (jika Anda bekerja di Swing selama setengah tahun, itu terlalu merepotkan untuk membiasakan diri dengan Windows Forms lagi dan sebaliknya) dan kami ingin semua orang di tim kami mampu mengerjakan semua aplikasi kami.

  • Formulir Windows umumnya membutuhkan waktu lebih sedikit untuk membuat aplikasi Windows yang mudah dikenali. Tidak ada jumlah kontrol skinning dan kustom di Jawa yang memecahkan masalah itu selama bertahun-tahun. Pada saat yang sama, kami tidak pernah memiliki pelanggan yang tidak dapat menggunakan aplikasi Swing.
  • Java dulunya memiliki ekosistem yang jauh lebih kaya dalam hal perpustakaan dan alat bantu pembuatan otomatis, tetapi itu berubah dengan cepat (Java tidak turun, lebih dari itu. NET sedang mengejar).
  • Untuk kasus yang jarang terjadi, multiplatform lebih disukai, Java mengalahkan .NET. Mono luar biasa, tetapi masih lebih banyak pekerjaan daripada Jawa.

Jika kita memilih .NET kita dapat mulai fokus pada WPF, tetapi juga mulai menggunakan F #. Jika kita memilih Java, kita bisa mulai fokus pada RCP, tetapi juga mulai menggunakan Scala.

Adakah yang harus membuat keputusan serupa? Jika demikian, apa itu dan apa yang paling memengaruhi Anda? Adakah kekhawatiran utama yang saya lewatkan?

(Harap dicatat: sudah ada beberapa pertanyaan serupa pada Programmer. Saya sudah, tetapi mereka tidak konstruktif atau dari sudut yang berbeda.)

Deckard
sumber
2
Dari intisari bacaan saya percaya judul pertanyaan harus "Faktor apa yang harus saya pikirkan ketika memilih runtime / bahasa untuk aplikasi desktop Windows?" , lebih fokus pada aspek pengambilan keputusan dari pertanyaan Anda. Itu jauh lebih mudah untuk dijawab dan kurang infektif daripada "Apa yang harus saya gunakan?" - jenis pertanyaan yang sepertinya disiratkan oleh judul itu.
Spoike
@Spoike Poin hebat, saya memperbarui judul (membuatnya sedikit lebih pendek).
Deckard
1
Mungkin link ini memiliki sesuatu tentang masa depan Windows, yang sangat penting bagi kalian IMHO- zdnet.com/blog/microsoft/...
Gulshan
Memaksa pengguna Mac untuk menginstal Wine dan menjalankan aplikasi Windows sama dengan menyiksa mereka.
rightfold

Jawaban:

7

Kami menggunakan Java (Swing) plus beberapa suku cadang asli via JNI. Sementara permintaan komersial untuk multiplatformness mungkin marginal hari ini, situasinya mungkin berbeda dalam 5 tahun, dan siklus hidup aplikasi (aplikasi pengukuran ilmiah) akan lebih seperti 10+ tahun (pendahulunya C ++, masih digunakan hari ini, memiliki file sumber tertanggal 1991). Seperti yang Anda tulis, Java mengalahkan .NET dengan tangan turun di lingkungan non-Windows, dan jika kita perlu beralih dari Windows, itu hanya masalah mengkompilasi ulang beberapa bagian asli, mungkin memperbaiki tampilan GUI, dan memeriksa bahwa semuanya bekerja.

Jika Anda yakin Anda akan menjadi Windows saja, dan aplikasi Anda akan hidup hanya beberapa tahun, maka .NET mungkin lebih disukai - terlihat dan berperilaku lebih seperti aplikasi asli karena itu. Tetapi sebagai investasi jangka panjang saya lebih percaya pada Jawa. Swing mungkin terlihat sedikit kurang sempurna, waktu start-up mungkin lebih lama, semuanya agak kurang optimal karena lapisan abstraksi multi-platform, tapi setidaknya itu "hanya bekerja".

Joonas Pulakka
sumber
2
Dalam hal apa aplikasi .NET lebih merupakan aplikasi Windows asli daripada Java?
Rei Miyasaka
@ Reei: bahwa .NET framework hanya tersedia untuk Windows. Tentu, ada mono, tapi selalu tertinggal, dan saat ini masa depannya, yah, tidak pasti.
Tamás Szelei
1
@ Tamas Itu masalah yang sangat berbeda dan insidental. Selain dari beberapa byte kode pertama dalam .exes yang mencetak "Program ini tidak dapat dijalankan dalam mode DOS.", Program ini masih sepenuhnya kode byte. Pustaka Java sama asli dengan Windows dengan. NET, meskipun sebaliknya mungkin tidak benar karena kurangnya implementasi.
Rei Miyasaka
4

Suatu hal yang mungkin ingin Anda pertimbangkan adalah proyek IKVM yang memungkinkan Anda untuk menggunakan kode Java di dunia .NET. Anda kemudian bisa mendapatkan manfaat dari backend Java, sementara - untuk pemahaman saya - Anda dapat memiliki lapisan tipis di Swing atau WinForms.

http://www.ikvm.net/

Saya telah mendengar bahwa orang lain telah menggunakan ini untuk menggunakan pustaka koneksi sumber terbuka yang ditulis dalam Java dari .NET daripada harus menggunakan versi .NET yang rumit.


sumber
3

Ada sumber daya di MSDN yang mungkin berguna bagi Anda: http://msdn.microsoft.com/en-us/gg715299.aspx .

Jika Anda pergi ke bagian bawah halaman, Anda akan menemukan sekelompok whitepapers yang membandingkan Java dan .NET secara konseptual. Tentu saja karena ada di MSDN, ini bias terhadap .NET, tetapi sumber dayanya masih cukup berguna.

David Salamon
sumber
1

Saya telah melakukan beberapa pemikiran tentang ini juga, dan saya telah menemukan jawabannya tergantung pada jenis proyek dan apa yang dapat Anda ramalkan tentang itu.

Terkadang, membuat One Codebase untuk melayani semua platform adalah hal yang baik - Anda mendapatkan beberapa tingkat konsistensi UI dengan kode yang kurang keseluruhan. Saya pikir kelebihan dan kekurangannya jelas, jadi saya akan lewati itu.

Ada kalanya memiliki 2 basis kode yang ditulis secara asli lebih baik. Jika, misalnya, menulis aplikasi Anda di WPF elegan untuk .NET, dan menulisnya, katakanlah, Kakao elegan untuk Mac OS, kode yang dihasilkan mungkin sebenarnya lebih kecil daripada menggunakan, katakanlah, Java atau Mono (yang tidak memiliki WPF). Dalam hal ini, Anda mungkin mendapatkan hasil yang lebih baik dengan kode lebih sedikit.

Pertimbangan terakhir mungkin melakukan aplikasi Anda sebagai aplikasi HTML5, atau bahkan ekstensi Chrome, tetapi itu mungkin bidang yang terlalu kiri.

Kevin Hsu
sumber
1

Sudahkah Anda mempertimbangkan Silverlight ? Ini bisa menjadi pilihan yang baik untuk membangun juga aplikasi Windows Desktop (dari SL4 +) dan berfungsi dengan baik di Mac.

ADIMO
sumber
SL hampir mati ..
klm_
Microsoft tidak berpikir begitu. Secara pribadi saya pikir html5 adalah pilihan pertama untuk aplikasi web tetapi sisi klien SL bisa menjadi teknologi yang baik.
ADIMO
Saya juga akan menggunakan HTML5, karena didukung oleh W3O. Silverlight berkompetisi dengan HTML5 dan jika ia tidak mendapatkan ceruk itu akan mati, saya pikir.
klm_
1

Sebagai pengembang Java purna waktu, saya dapat memberi tahu Anda bahwa sementara kompatibilitas lintas platform luar biasa, setiap integrasi asli adalah neraka .

Saya selalu memiliki banyak masalah, dan terkadang gagal, di tanah ini. Anda mungkin tidak membutuhkannya, tetapi kadang-kadang saya menemukan itu dan biasanya sakit.

  • Integrasi dengan COM itu menyakitkan, dan COM + kadang-kadang tidak mungkin (minggu-minggu terbuang untuk membuatnya bekerja dengan Windows Tablet API).
  • Interaksi perangkat keras dapat membahayakan. Terkadang API hanya tersedia di satu platform (mis. Integrasi kamera / pemindai).
  • Interaksi dengan aplikasi lokal juga dapat merugikan. Apakah saya menyebutkan sakit COM? Nah, cara lain (yang sebenarnya kami gunakan) adalah membuat dan mengeksekusi skrip VBS yang meluncurkan aplikasi Windows seperti MapPoint atau beberapa aplikasi pemetaan berpemilik dan mengisinya dengan data.
  • Instalasi dan integrasi desktop (pintasan, uninstaller, menu mulai) juga dapat merugikan. Start Web sangat tidak bisa diandalkan. Alternatif lain mahal, atau kehilangan beberapa fitur (seperti pembaruan distribusi).

Jangan salah sangka. Saya adalah pengembang Java dan tidak bermaksud untuk menyalakannya. Saya hanya mengatakan bahwa jika Anda curiga Anda memerlukan salah satu di atas, itu bisa menyakitkan dan Anda mungkin lebih baik dengan .net . Setidaknya itu argumen yang harus Anda pertimbangkan.

Konrad Garus
sumber