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 (teks B
,, teks) yang dilampirkan ke sebuah P
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.