ฉันทั้งดีและไม่ดีที่จะตอบคำถามนี้ - ดีในการที่ฉันเคยใช้มาก่อนและไม่ดีว่าฉันเคยมีประสบการณ์กับ HTML / CSS / JavaScript ก่อนที่จะทำงานกับ GWT สิ่งนี้ทำให้ฉันโกรธด้วยการใช้ GWT ในลักษณะที่นักพัฒนา Java คนอื่น ๆ ที่ไม่รู้จัก DHTML อย่างแท้จริง
GWT ทำสิ่งที่มันบอก - มันเป็นนามธรรมจาวาสคริปต์และ HTML ในระดับจาวา สำหรับนักพัฒนาหลายคนเสียงนี้ยอดเยี่ยม อย่างไรก็ตามเรารู้ว่าในขณะที่ Jeff Atwood วางไว้abstractions ทั้งหมดล้มเหลว abstractions (ควรอ่านถ้าพิจารณา GWT) ด้วย GWT สิ่งนี้จะแนะนำปัญหาต่อไปนี้โดยเฉพาะ:
ใช้ HTML ใน GWT
อย่างที่ฉันได้กล่าวไปแล้วในระดับหนึ่งถึงแม้จะย่อ HTML ออกไป ฟังดูดีสำหรับนักพัฒนา Java แต่มันไม่ใช่ HTML เป็นรูปแบบมาร์กอัปเอกสาร หากคุณต้องการสร้างวัตถุ Java เพื่อกำหนดเอกสารคุณจะไม่ใช้องค์ประกอบมาร์กอัปเอกสาร มันเป็น verbose ที่น่าคลั่ง มันยังควบคุมไม่เพียงพอ ในรูปแบบ HTML <p>Hello how are <b>you</b>?</p>
มีหลักวิธีหนึ่งที่จะเขียน ใน GWT คุณมีโหนดลูก 3 โหนด (ข้อความB
, ข้อความ) ที่แนบกับP
โหนด คุณสามารถสร้าง P ก่อนหรือสร้างโหนดลูกก่อน โหนดลูกอย่างใดอย่างหนึ่งอาจเป็นผลลัพธ์การส่งคืนของฟังก์ชัน หลังจากไม่กี่เดือนของการพัฒนากับนักพัฒนาหลายคนพยายามที่จะถอดรหัสสิ่งที่เอกสาร HTML ของคุณดูเหมือนโดยการติดตามรหัส GWT ของคุณเป็นกระบวนการที่ทำให้เกิดอาการปวดหัว
ในท้ายที่สุดทีมตัดสินใจว่าอาจใช้ HTMLPanel สำหรับ HTML ทั้งหมดเป็นวิธีที่ถูกต้อง ตอนนี้คุณได้สูญเสียข้อดีหลายข้อของ GWT ในการมีองค์ประกอบพร้อมโค้ด Java เพื่อผูกข้อมูลได้ง่าย
ใช้ CSS ใน GWT ครับ
โดยสิ่งที่แนบมากับสิ่งที่เป็นนามธรรมของ HTML หมายความว่าวิธีที่คุณต้องใช้ CSS นั้นแตกต่างกัน มันอาจจะดีขึ้นตั้งแต่ฉันใช้ GWT ครั้งล่าสุด (ประมาณ 9 เดือนที่ผ่านมา) แต่ในขณะนั้นการรองรับ CSS นั้นยุ่งเหยิง เนื่องจากวิธีที่ GWT ทำให้คุณสร้าง HTML คุณมักจะมีระดับของโหนดที่คุณไม่ทราบว่าถูกฉีด (CSS dev ใด ๆ รู้ว่าสิ่งนี้มีผลต่อการเรนเดอร์อย่างมาก) มีหลายวิธีในการฝังหรือเชื่อมโยง CSS ซึ่งทำให้เกิดความสับสนของเนมสเปซ ยิ่งกว่านั้นคุณได้รับการสนับสนุนสไปรต์ซึ่งฟังดูดีอีกครั้ง แต่จริง ๆ แล้วกลายพันธุ์ CSS ของคุณและเรามีปัญหากับมันในการเขียนคุณสมบัติซึ่งเราต้องเขียนทับอย่างชัดเจนในภายหลังหรือในบางกรณีขัดขวางความพยายามของเรา เขียนโค้ด CSS และต้องออกแบบใหม่ในวิธีที่ GWT ไม่ทำให้เสีย
สหภาพของปัญหาการตัดกันของผลประโยชน์
ภาษาใดก็ตามจะมีปัญหาและผลประโยชน์เป็นของตัวเอง ไม่ว่าคุณจะใช้มันเป็นสูตรถ่วงน้ำหนักตามสูตรเหล่านั้นหรือไม่ เมื่อคุณมีสิ่งที่เป็นนามธรรมสิ่งที่คุณได้รับคือการรวมกันของปัญหาทั้งหมดและจุดตัดของผลประโยชน์ JavaScript มีปัญหาและมักพบในวิศวกรฝั่งเซิร์ฟเวอร์ แต่ก็มีคุณสมบัติบางอย่างที่มีประโยชน์สำหรับการพัฒนาเว็บอย่างรวดเร็ว คิดว่าการปิด, ชวเลขไวยากรณ์, วัตถุ ad-hoc, ทุกสิ่งที่ทำโดย Jquery (เช่นการสืบค้น DOM โดยตัวเลือก CSS) ตอนนี้ลืมที่จะใช้มันใน GWT!
แยกความกังวล
เราทุกคนรู้ว่าเมื่อขนาดของโครงการเพิ่มขึ้นการแยกความกังวลออกมาเป็นสิ่งสำคัญ หนึ่งในสิ่งที่สำคัญที่สุดคือการแยกระหว่างจอแสดงผลและการประมวลผล GWT ทำให้เรื่องนี้ยากมาก อาจเป็นไปไม่ได้ แต่ทีมที่ฉันทำไม่เคยคิดวิธีแก้ปัญหาที่ดีมาก่อนและแม้ว่าเราคิดว่าเรามีเราก็ยังมีอีกคนหนึ่งรั่วเข้ามา
เดสก์ท็อป! = เว็บ
เมื่อ @Berin Loritsch โพสต์ในความคิดเห็นโมเดลหรือความคิด GWT ถูกสร้างขึ้นเพื่อเป็นแอพพลิเคชั่นที่มีชีวิตซึ่งโปรแกรมมีหน้าจอแสดงผลการใช้ชีวิตควบคู่กับเครื่องมือประมวลผลอย่างแน่นหนา ฟังดูดีเพราะนั่นเป็นสิ่งที่หลายคนรู้สึกว่าเว็บขาด แต่มีสองปัญหา: ก)เว็บถูกสร้างขึ้นบน HTTP และสิ่งนี้แตกต่างกันโดยเนื้อแท้ ดังที่ฉันได้กล่าวไว้ข้างต้นเทคโนโลยีที่สร้างบน HTTP - HTML, CSS, แม้แต่การโหลดทรัพยากรและการแคช (รูปภาพ, ฯลฯ ) ได้ถูกสร้างขึ้นสำหรับแพลตฟอร์มนั้น B)นักพัฒนา Java ที่ทำงานบนเว็บไม่ได้เปลี่ยนเป็นความคิดของแอปพลิเคชันบนเดสก์ท็อป สถาปัตยกรรมในโลกนี้เป็นวินัยที่แตกต่างอย่างสิ้นเชิง นักพัฒนาระบบเฟล็กซ์อาจเหมาะสมกว่า GWT มากกว่าผู้พัฒนาเว็บ Java
สรุปแล้ว...
GWT สามารถผลิตแอปพลิเคชัน AJAX ที่รวดเร็วและสกปรกได้อย่างง่ายดายโดยใช้ Java หากสิ่งที่รวดเร็วและสกปรกไม่ฟังเหมือนที่คุณต้องการอย่าใช้มัน บริษัท ที่ฉันทำงานให้คือ บริษัท ที่ใส่ใจเกี่ยวกับผลิตภัณฑ์ขั้นสุดท้ายอย่างมากและมีความรู้สึกว่าขัดเงาทั้งภาพและโต้ตอบกับผู้ใช้ สำหรับเราผู้พัฒนาส่วนหน้านั่นหมายความว่าเราจำเป็นต้องควบคุม HTML, CSS และ JavaScript ในรูปแบบที่ใช้ GWT เช่นพยายามเล่นเปียโนด้วยถุงมือมวย