Alasan TIDAK untuk menggunakan JSF [ditutup]

64

Saya baru di StackExchange, tetapi saya pikir Anda akan dapat membantu saya.

Kami sedang membuat aplikasi Java Enterprise baru, menggantikan solusi JSP lawas. Karena banyak perubahan, UI dan bagian-bagian dari logika bisnis sepenuhnya akan dipikirkan ulang dan diterapkan kembali.

Pikiran pertama kami adalah JSF, karena ini adalah standar di Java EE. Awalnya saya memiliki kesan yang baik. Tetapi sekarang saya mencoba untuk mengimplementasikan prototipe fungsional, dan memiliki beberapa kekhawatiran serius tentang penggunaannya.

Pertama-tama, itu menciptakan campuran pseudo-HTML / CSS / JS tidak sah terburuk, paling berantakan yang pernah saya lihat. Itu melanggar setiap aturan tunggal yang saya pelajari dalam pengembangan web. Lebih jauh lagi, ini menjadi satu, yang seharusnya tidak begitu erat digabungkan: Layout, Desain, Logika dan Komunikasi dengan server. Saya tidak melihat bagaimana saya dapat memperpanjang output ini dengan nyaman, baik dengan styling dengan CSS, menambahkan permen UI (seperti hot-key yang dapat dikonfigurasi, widget drag-and-drop) atau apa pun.

Kedua, ini terlalu rumit. Kompleksitasnya luar biasa. Jika Anda bertanya kepada saya, itu adalah abstraksi yang buruk dari teknologi web dasar, pada akhirnya lumpuh dan tidak berguna. Apa manfaat yang saya miliki? Tidak ada, jika Anda memikirkannya. Ratusan komponen? Saya melihat sepuluh ribu cuplikan HTML / CSS, sepuluh ribu cuplikan JavaScript dan ribuan plug-in jQuery sebagai tambahan. Ini memecahkan banyak masalah - kita tidak akan memiliki jika kita tidak akan menggunakan JSF. Atau pola pengontrol depan sama sekali.

Dan Terakhir, saya pikir kita harus memulai dari awal, katakanlah 2 tahun. Saya tidak melihat bagaimana saya bisa menerapkan semua mock-up GUI pertama kami (Selain itu, kami tidak memiliki Ahli JSF di tim kami). Mungkin kita bisa meretasnya bersama-sama. Dan akan ada lebih banyak. Saya yakin kita bisa meretas retas kita. Tetapi pada titik tertentu, kita akan mandek. Karena segala sesuatu di atas tingkat layanan mengendalikan JSF. Dan kita harus memulai dari awal.

Saran saya adalah mengimplementasikan api REST, menggunakan JAX-RS. Kemudian buat klien HTML5 / Javascript dengan sisi klien MVC. (atau sedikit rasa MVC ..) Ngomong-ngomong; kita akan memerlukan api REST, karena kami juga mengembangkan front-end Android parsial.

Saya ragu, JSF adalah solusi terbaik saat ini. Ketika internet berkembang, saya benar-benar tidak mengerti mengapa kita harus menggunakan 'rake' ini.

Sekarang, apa pro / kontra? Bagaimana saya bisa menekankan poin saya untuk tidak menggunakan JSF? Apa poin kuat menggunakan JSF atas saran saya?

Bruno Schäpper
sumber
24
Itu pertanyaan yang ditulis dengan baik dari pengguna baru. Pertimbangkan untuk meninggalkan komentar saat downvoting.
ThiefMaster
2
Karena Anda menulis ulang semuanya, saya tidak hanya akan mempertimbangkan tidak menggunakan JSF tetapi mempertimbangkan tidak menggunakan Java sama sekali. Bahasa skrip modern (yaitu bukan PHP atau Perl) cukup bagus dan ramah pengembang.
ThiefMaster
11
Saya tidak mengundurkan diri, tapi ini bukan pertanyaan, itu kata kasar. Sia-sia telah memutuskan bahwa ia membenci JSF, sekarang ia meminta lebih banyak alasan untuk tidak menggunakannya?
Michael Borgwardt
4
Java adalah pilihan terbaik jika aplikasi Anda akan besar (kompleks dan / atau dapat diskalakan) dan / atau didistribusikan, menggunakan banyak layanan; jika aplikasi Anda tidak masuk dalam kategori ini (tidak begitu rumit dan tidak perlu diskalakan) maka Python (Django) atau Ruby (Rails) akan menjadi pilihan yang lebih baik. Kompleksitas JSF, memiliki manfaat dari kekuatannya; sebagai alternatif untuk itu, Anda harus melihat Kerangka Kerja Web lain seperti Spring MVC atau Struts 2 jika Java wajib.
m3th0dman
14
Ini adalah kata-kata kasar yang mencari cadangan, bukan pertanyaan seperti itu.

Jawaban:

26

Setidaknya ada satu alasan yang sangat bagus untuk mempertimbangkan JSF.

Ini adalah bagian standar dari tumpukan Java EE, dan karenanya akan tersedia - dan berfungsi - di SEMUA wadah Java EE untuk waktu yang sangat, sangat lama. Dan dipelihara juga, tanpa Anda perlu melakukannya jika Anda telah mematuhi secara ketat spesifikasi Java EE.

Jika ini merupakan masalah bagi Anda, maka Anda harus mempertimbangkannya. Sebagian besar perangkat lunak hidup lebih lama dari yang diperkirakan oleh perancang mereka, terutama jika dipertimbangkan saat ditulis.


sumber
4
Saya tidak yakin tentang itu. Untuk J2EE, kata 'standar' dan 'bekerja' tidak ditulis dalam batu, khususnya ketika kita berbicara sistem yang akan / harus didukung selama bertahun-tahun, termasuk perubahan ke versi j2ee yang digunakan.
magallanes
7
Dalam pengalaman saya (terbatas) dengan JSF argumen ini sebenarnya tidak berlaku. Saya telah melihat aplikasi terjebak dengan satu versi JSF dan tidak ada jalur migrasi yang waras ke versi yang lebih baru. Tentu server aplikasi masih menjalankannya, tapi itu semua dukungan yang akan Anda dapatkan jika Anda tidak memiliki banyak uang untuk dibakar pada kontrak dukungan yang terlalu mahal.
Jens Schauder
@JensSchauder, pengalaman saya hanyalah Anda dapat menulis aplikasi portabel, memigrasikan dan meningkatkan versi jsf mereka. Ini melibatkan untuk mengetahui spesifikasi dan kode untuk itu, bukan untuk implementasinya. Itu berfungsi, sebagai pengkodean untuk JPA bukan karya Hibernate. Sudah melakukan itu selama bertahun-tahun.
ymajoros
14

Sekarang, apa pro / kontra? Bagaimana saya bisa menekankan poin saya untuk tidak menggunakan JSF? Apa poin kuat menggunakan JSF atas saran saya?

Anda tampaknya sudah memutuskan tentang kontra, dan saya harus setuju dengan beberapa dari mereka (itu tidak cukup tata letak dan logika terpisah, dan HTML yang dihasilkan sering mengerikan), tetapi tidak setuju pada yang lain (jika Anda menggunakan Faset, yang saya akan sangat merekomendasikan, maka output pasti harus valid).

Jadi, inilah beberapa pro:

  • Ada beberapa pustaka komponen yang sangat kuat seperti PrimceFaces atau RichFaces yang menawarkan banyak fungsi di luar kotak. Ini dapat menghemat banyak pekerjaan jika memenuhi persyaratan Anda (tidak terlalu banyak jika Anda memiliki persyaratan yang tidak dapat dinegosiasikan yang tidak tercakup oleh mereka).
  • Komponen Komposit menawarkan cara yang sangat bersih untuk memodulasi halaman Anda
  • JSF terintegrasi dengan sangat baik dengan Java EE lainnya
  • AJAX via rendering komponen sangat mudah dan nyaman

Tapi tentu saja tidak ada kelebihan ini yang begitu besar sehingga Anda harus menggunakan JSF di atas beberapa kerangka kerja lain yang sudah berpengalaman dengan tim Anda.

Michael Borgwardt
sumber
1
Ini bukan ID, itu atribut yang tidak valid. Seperti "peran" dan "diperluas aria" di tampilan tab. Apakah Anda tahu cara memperbaikinya?
Bruno Schäpper
1
@Vain: nggak, tampaknya menjadi masalah yang berbeda, mungkin dengan komponen yang saya tidak gunakan atau yang baru. Dimungkinkan untuk mengubah output HTML dari komponen JSF dengan menentukan renderer alternatif (yang idealnya hanya mengganti satu atau dua metode dari renderer default), tetapi tentu saja ini bukan sesuatu yang harus Anda lakukan hanya untuk mendapatkan markup yang valid.
Michael Borgwardt
1
HTML mengerikan ini disebabkan oleh implementasi yang digunakan. Ini adalah pemahaman saya bahwa mode debug dari implementasi JSF referensi sangat buruk dalam hal ini. Apakah Anda tahu pengaturan yang lebih baik untuk menghasilkan HTML yang lebih baik?
1
@ Thorbjørn Ravn Andersen Ya, masalah dengan HTML yang tidak valid sebenarnya adalah masalah PrimeFaces. Kami menggunakannya karena ini dibangun di jQuery-UI. Apa nasihatmu; haruskah saya menggunakan perpustakaan lain? Saya sangat suka HTML yang valid. Bagi saya itu hanyalah suatu KEHARUSAN.
Bruno Schäpper
1
Melihat kembali pertanyaan pertama saya di sini, saya ingin berbagi pengalaman tentang pro Anda: Kami bekerja dengan JSF, dan dengan pengalaman itu kami tidak akan memilihnya lagi. Hampir tidak ada yang berfungsi seperti yang diharapkan dan di luar kotak. Ya, ada Perpustakaan yang kuat. Tetapi kami akhirnya mengerjakan sendiri semua komponen kami, karena mereka tidak akan bekerja sesuai kebutuhan kami. Sungguh menakjubkan betapa cepatnya kita memiliki 'DataTable' kita dengan memuat malas saat menggulir. Komponen Komposit tidak bekerja untuk kami, saya tidak bisa memberi tahu Anda alasannya, saya kira mereka buggy. Render rendering AJAX sebenarnya merepotkan bagi sisi klien JS.
Bruno Schäpper
9

JSF adalah kerangka kerja web stateful yang memadai untuk Java yang merupakan standar yang berarti didukung oleh banyak vendor besar (termasuk FOSS). Ini memiliki dukungan perpustakaan pihak ke-3 yang kuat (PrimeFaces, IceFaces dll). Namun, pada dasarnya 'mematahkan web' karena sifatnya yang stateful (dan banyak hal lainnya). Lihat perbandingan Matt Raible tentang kerangka kerja web berbasis JVM , JSF biasanya mendekati yang terakhir.

Sunting - dengan JSF 2.2 - Anda dapat mulai berpendapat bahwa itu tidak merusak web sebanyak dulu. Sebenarnya integrasi HTML5 tidak semuanya mengerikan :-).

Martijn Verburg
sumber
1
Itu 'menghancurkan web', memang .. Dan terima kasih atas perbandingan Matt Raible, tidak tahu itu.
Bruno Schäpper
3
Perhatikan bahwa JSF tidak harus stateful. Saya sering setuju, tetapi ada dukungan yang cukup bagus untuk permintaan berbasis GET stateless dan jika Anda tidak menggunakan formulir maka tidak ada negara sama sekali.
Arjan Tijms
Cukup adil Arjan, saya kira saya baru saja melihat banyak kegunaan stateful.
Martijn Verburg
Tautan ke presentasi
Raible
6

Kami memiliki aplikasi warisan JSP / Struts 1.0. Kami melewatkan Struts 2, JSF, dan segala sesuatu yang telah terjadi sejak Struts 1 dan melompat ke Spring 3.0. Ini memiliki dukungan (dan komunitas aktif) untuk daftar keinginan kami - Eclipse IDE, MVC dan REST. Plus kami membuang Javascript / ajax homegrown vintage kami untuk jquery.

YMMV tetapi Spring telah menjadi migrasi yang lancar bagi kami.

jqa
sumber