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.)
sumber
Jawaban:
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".
sumber
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
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.
sumber
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.
sumber
Sudahkah Anda mempertimbangkan Silverlight ? Ini bisa menjadi pilihan yang baik untuk membangun juga aplikasi Windows Desktop (dari SL4 +) dan berfungsi dengan baik di Mac.
sumber
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.
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.
sumber