Saya sedang mempertimbangkan penggunaan GWT pada proyek pengembangan aplikasi web in-house utama, yaitu keuntungan utama di mata saya adalah kompilasi silang ke Javascript yang (setidaknya secara teoritis) akan membantu tim saya mengurangi ukuran tumpukan teknologi dengan satu .
Namun, setelah dibakar sebelumnya (seperti kebanyakan devs), saya ingin mendengar dari programmer yang benar-benar menggunakannya pada masalah dengan GWT yang akan menghambat, atau membatasi, itu digunakan dalam domain masalah tertentu.
Apa argumen yang menentang penggunaan GWT, dan mengapa?
java
javascript
ajax
gwt
Jas
sumber
sumber
Jawaban:
Saya baik dan buruk untuk menjawab pertanyaan ini - baik, karena saya sebenarnya pernah menggunakannya sebelumnya, dan buruk, karena saya cukup berpengalaman dengan HTML / CSS / JavaScript sebelum bekerja dengan GWT. Ini membuat saya marah dengan menggunakan GWT sedemikian rupa sehingga pengembang Java lain yang tidak benar-benar tahu DHTML mungkin belum.
GWT melakukan apa yang dikatakannya - itu abstrak JavaScript dan sedikit banyak HTML ke Jawa. Bagi banyak pengembang, ini terdengar brilian. Namun, kita tahu, seperti yang dikatakan Jeff Atwood, semua abstraksi adalah abstraksi yang gagal (layak dibaca jika mempertimbangkan GWT). Dengan GWT, ini secara khusus memperkenalkan masalah-masalah berikut:
Menggunakan HTML di GWT menyebalkan.
Seperti yang saya katakan, sedikit banyak, bahkan abstrak HTML. Kedengarannya bagus untuk pengembang Java. Tapi ternyata tidak. HTML adalah format markup dokumen. Jika Anda ingin membuat objek Java untuk mendefinisikan dokumen, Anda tidak akan menggunakan elemen markup dokumen. Ini sangat verbose. Itu juga tidak cukup terkendali. Dalam HTML pada dasarnya ada satu cara untuk menulis
<p>Hello how are <b>you</b>?</p>
. Di GWT, Anda memiliki 3 simpul anak (teksB
,, teks) yang dilampirkan ke sebuahP
simpul. Anda dapat membuat P terlebih dahulu, atau membuat simpul anak terlebih dahulu. Salah satu simpul anak mungkin merupakan hasil kembalinya suatu fungsi. Setelah beberapa bulan pengembangan dengan banyak pengembang, mencoba menguraikan seperti apa dokumen HTML Anda dengan melacak kode GWT Anda adalah proses yang memicu sakit kepala.Pada akhirnya, tim memutuskan bahwa mungkin menggunakan HTMLPanel untuk semua HTML adalah cara yang tepat. Sekarang, Anda telah kehilangan banyak keuntungan GWT karena memiliki elemen yang tersedia untuk kode Java untuk mengikat data dengan mudah.
Menggunakan CSS di GWT menyebalkan.
Dengan melampirkan abstraksi HTML, ini berarti bahwa cara Anda menggunakan CSS juga berbeda. Mungkin sudah membaik sejak saya terakhir menggunakan GWT (sekitar 9 bulan lalu), tetapi pada saat itu, dukungan CSS berantakan. Karena cara GWT membuat Anda membuat HTML, Anda sering memiliki level node yang tidak Anda ketahui disuntikkan (setiap pengembang CSS tahu bagaimana ini secara dramatis dapat memengaruhi rendering). Ada terlalu banyak cara untuk menyematkan atau menautkan CSS, menghasilkan kekacauan ruang nama yang membingungkan. Selain itu Anda memiliki dukungan sprite, yang sekali lagi terdengar bagus, tetapi sebenarnya bermutasi CSS Anda dan kami punya masalah dengan itu menulis properti yang kemudian kami harus secara eksplisit menimpa nanti, atau dalam beberapa kasus, menggagalkan upaya kami untuk mencocokkan tangan kami. kode CSS dan harus hanya mendesain ulang dengan cara yang GWT tidak mengacaukannya.
Persatuan masalah, persimpangan manfaat
Bahasa apa pun akan memiliki masalah dan manfaatnya sendiri. Apakah Anda menggunakannya adalah rumus tertimbang berdasarkan itu. Ketika Anda memiliki abstraksi, yang Anda dapatkan adalah gabungan dari semua masalah, dan persimpangan manfaat. JavaScript memiliki masalah, dan biasanya diejek di kalangan insinyur sisi server, tetapi juga memiliki beberapa fitur yang membantu untuk pengembangan web yang cepat. Pikirkan penutupan, singkatan sintaksis, objek ad-hoc, semua hal yang dilakukan oleh Jquery (seperti permintaan DOM oleh pemilih CSS). Sekarang lupakan tentang menggunakannya di GWT!
Pemisahan masalah
Kita semua tahu bahwa seiring bertambahnya ukuran proyek, memiliki pemisahan keprihatinan yang baik adalah penting. Salah satu yang paling penting adalah pemisahan antara tampilan dan pemrosesan. GWT membuat ini sangat sulit. Mungkin bukan tidak mungkin, tetapi tim saya berada di tidak pernah datang dengan solusi yang baik, dan bahkan ketika kami pikir kami punya, kami selalu punya satu bocor ke yang lain.
Desktop! = Web
Sebagai @Berin Loritsch memposting di komentar, model atau pola pikir GWT dibangun untuk aplikasi hidup, di mana program memiliki tampilan hidup yang erat digabungkan dengan mesin pemrosesan. Ini kedengarannya bagus karena itulah yang dirasakan oleh banyak web. Tetapi ada dua masalah: A) Web dibangun dengan HTTP dan ini pada dasarnya berbeda. Seperti yang saya sebutkan di atas, teknologi yang dibangun pada HTTP - HTML, CSS, bahkan pemuatan sumber daya dan caching (gambar, dll.), Telah dibangun untuk platform itu. B) Pengembang Java yang telah bekerja di web tidak mudah beralih ke pola pikir aplikasi desktop ini. Arsitektur di dunia ini adalah disiplin yang sama sekali berbeda. Pengembang Flex mungkin lebih cocok untuk GWT daripada pengembang web Java.
Kesimpulannya...
GWT mampu menghasilkan aplikasi AJAX cepat dan kotor dengan cukup mudah menggunakan Java saja. Jika cepat dan kotor tidak terdengar seperti yang Anda inginkan, jangan gunakan itu. Perusahaan tempat saya bekerja adalah perusahaan yang sangat peduli dengan produk akhir, dan itu rasa memoles, baik visual dan interaktif, kepada pengguna. Bagi kami pengembang front-end, ini berarti bahwa kami perlu mengontrol HTML, CSS, dan JavaScript dengan cara yang dibuat menggunakan GWT seperti mencoba memainkan piano dengan memakai sarung tinju.
sumber
Kami menggunakan GWT untuk aplikasi web eGovernment besar (SOA di backend) yang memiliki penggunaan berat. UI lama ada di DHTML tetapi kami memiliki masalah dengan kompatibilitas browser, optimalisasi kinerja dan proses pengembangan, jadi kami mencari alternatif.
Persyaratan kami adalah:
Kami memilih GWT dan saya tidak pernah menyesalinya. Tim baru tidak memiliki pengalaman DHMTL dan karenanya proses pengembangan Java GWT sangat membantu. Yang Anda dapatkan dari kotak itu adalah:
Aplikasi kami hanya mengeluarkan satu permintaan ke server saat startup. Di sisi negatifnya adalah bahwa GWT (dan juga Android) memiliki desain yang buruk, tetapi jika Anda menerapkan tampilan Anda sendiri dan merasa Anda harus mengadaptasi CSS. Atau Anda dapat menggunakan berbagai pustaka komponen untuk GWT yang membuatnya mudah untuk menerapkan gaya dan tema yang tepat.
Bagi saya tidak ada poin bahwa mungkin HTML DOM tidak sebagus kerajinan tangan, ini tidak pernah menjadi masalah. Ketika saya mengembangkan di C ++, saya tidak melihat kode assembler yang dihasilkan. Ketika saya mengembangkan di GWT tidak pernah ada alasan bagi saya untuk melihat kode JS dan hanya sekali alasan untuk melihat DOM dan melakukan beberapa refactoring.
Bagi saya GWT adalah satu-satunya pilihan ketika datang ke pengembangan RIA dan saya berharap bahwa GWT memiliki masa depan yang cerah. Lihat pernyataan misi di:
[1] http://code.google.com/intl/de-DE/webtoolkit/makinggwtbetter.html#introduction
Tetapi seharusnya tidak disebutkan bahwa Google tidak menggunakan GWT pada banyak proyek internal mereka dan bahwa saat ini ada beberapa rumor tentang masa depan GWT, lihat
[2] http://googlewebtoolkit.blogspot.com/2011/11/gwt-and-dart.html
[3] https://plus.google.com/105933370793992913359/posts/bLfSagtziBC
sumber