Bu soruyu cevaplamak için hem iyiyim hem de kötüyüm - iyi, aslında daha önce kullandım ve kötüydü, çünkü GWT ile çalışmaya başlamadan önce HTML / CSS / JavaScript ile oldukça deneyimliydim. Bu beni GWT kullanarak DHTML'yi gerçekten bilmeyen diğer Java geliştiricilerinin kullanamayacağı şekilde delirtti.
GWT ne diyorsa yapar - JavaScript'i ve bir dereceye kadar HTML'yi Java'ya çeker. Birçok geliştirici için bu kulağa çok hoş geliyor. Ancak, Jeff Atwood'un söylediği gibi, tüm soyutlamalar başarısız soyutlamalardır (GWT düşünülürse okunmaya değer). GWT ile bu özellikle aşağıdaki problemleri ortaya çıkarır:
GWT'de HTML kullanmak berbat.
Dediğim gibi, bir dereceye kadar bile, HTML'den soyutlar. Bir Java geliştiricisine iyi geliyor. Ama değil. HTML, bir belge biçimlendirme formatıdır. Bir belgeyi tanımlamak için Java nesneleri oluşturmak istiyorsanız, belge işaretleme öğelerini kullanmazsınız. Çıldırtıcı derecede ayrıntılı. Ayrıca yeterince kontrol edilmiyor. HTML'de aslında yazmanın bir yolu var <p>Hello how are <b>you</b>?</p>
. GWT’de, B
bir P
düğüme bağlı 3 alt düğüm (metin , metin) vardır . Önce P'yi ya da önce alt düğümleri oluşturabilirsiniz. Alt düğümlerden biri, bir işlevin dönüş sonucu olabilir. Birçok geliştirici ile birkaç ay süren bir geliştirme sürecinden sonra, GWT kodunuzu izleyerek HTML belgenizin nasıl göründüğünü deşifre etmeye çalışmak başağrısı yaratan bir işlemdir.
Sonunda, ekip belki tüm HTML için HTMLPanel kullanmanın doğru yol olduğuna karar verdi. Artık, GWT'nin, verileri kolayca bağlamak için Java kodunda hazır öğelere sahip olmasının avantajlarını kaybettiniz.
GWT'de CSS kullanmak berbat.
HTML soyutlamasına ek olarak, bu, CSS kullanma şeklinizin de farklı olduğu anlamına gelir. En son GWT'yi kullandığımdan bu yana iyileşmiş olabilir (yaklaşık 9 ay önce), ancak o zaman, CSS desteği bir karışıklıktı. GWT'nin size HTML oluşturma şeklinden dolayı, genellikle enjekte edildiğini bilmediğiniz düğüm düzeyleriniz vardır (herhangi bir CSS dev bunun görüntü oluşturmayı nasıl önemli ölçüde etkileyebileceğini bilir). CSS'yi gömmek veya bağlamak için çok fazla yol vardı, bu da kafa karıştırıcı bir isim alanı karmaşasına neden oldu. Bunun üzerine yine kulağa hoş gelen sprite desteğine sahiptiniz, ancak aslında CSS'nizi mutasyona uğrattınız ve daha sonra açıkça üzerine yazmak zorunda kaldığımız ya da bazı durumlarda elimizle eşleştirme girişimlerimizi engelleyen özellikleri yazma problemlerimiz vardı. CSS'yi kodladı ve GWT'nin batırmadığı şekilde yeniden tasarlamak zorunda kaldı.
Sorunların birliği, faydaların kesişimi
Herhangi bir dilde kendine özgü sorunları ve yararları olacak. Kullanıp kullanmadığınız, bunlara dayanan ağırlıklı bir formüldür. Bir soyutlamaya sahip olduğunuzda, elde ettiğiniz şey tüm sorunların birliği ve faydaların kesişimidir. JavaScript'in sorunları var ve sunucu tarafında çalışan mühendisler arasında genel olarak türetilmiş, ancak aynı zamanda hızlı web geliştirme için yararlı olan birkaç özelliği var. Kapanışları, sözdizimi stenoyu, geçici nesneleri, Jquery tarafından yapılan tüm işleri düşünün (DOM gibi CSS seçicisinin sorgulaması gibi). Şimdi GWT'de kullanmayı unutmayın!
Endişelerin ayrılması
Hepimiz bir projenin büyüklüğü arttıkça endişelerin iyi bir şekilde ayrılmasının kritik olduğunu biliyoruz. En önemlilerinden biri gösterimle işleme arasındaki ayrılıktır. GWT bunu gerçekten zorlaştırdı. Muhtemelen imkansız değil, ama üzerinde bulunduğum ekip asla iyi bir çözüm bulmadı, ve düşündüğümüz zaman bile, her zaman biri diğerine sızdı.
Masaüstü! = Web
@Berin Loritsch, yorumlarda yayınlandığı gibi, model veya zihniyet GWT, bir programın bir işleme motoruyla sıkıca birleştirilmiş bir oturma ekranı olduğu yaşam uygulamaları içindir. Bu kulağa hoş geliyor, çünkü çoğu kişi web'in eksik olduğunu düşünüyor. Ancak iki sorun var: A) Web HTTP üzerine kuruludur ve bu doğal olarak farklıdır. Yukarıda bahsettiğim gibi, HTTP üzerine inşa edilmiş teknolojiler - HTML, CSS, hatta kaynak yükleme ve önbellekleme (görüntüler, vb.) Bu platform için geliştirildi. B) Web üzerinde çalışan Java geliştiricileri bu masaüstü uygulaması zihniyetine kolayca geçiş yapmazlar. Bu dünyadaki mimari tamamen farklı bir disiplindir. Flex geliştiricileri muhtemelen GWT'ye Java web geliştiricilerinden daha uygun olacaktır.
Sonuç olarak...
GWT, yalnızca Java kullanarak oldukça kolay ve kirli AJAX uygulamaları üretme yeteneğine sahiptir. Hızlı ve kirli istediğiniz gibi görünmüyorsa, kullanmayın. Çalıştığım şirket, son ürüne çok değer veren bir şirketti ve kullanıcıya hem görsel hem de etkileşimli cila hissi verdi. Ön uç geliştiriciler için bu, HTML, CSS ve JavaScript'i GWT'yi kullanarak piyanoyu boks eldivenleriyle çalmaya çalışmak gibi yapılan şekilde kontrol etmemiz gerektiği anlamına geliyordu.