เมื่อไม่ใช้ Google Web Toolkit [ปิด]


55

ฉันกำลังพิจารณาใช้ GWT ในโครงการพัฒนาเว็บแอพหลัก ๆ ของ บริษัท นั่นคือข้อได้เปรียบที่สำคัญในสายตาของฉันคือการคอมไพล์ข้ามไปยัง Javascript ซึ่ง (อย่างน้อยในทางทฤษฎี) จะช่วยทีมของฉันลดขนาดของสแต็คเทคโนโลยี .

อย่างไรก็ตามก่อนที่จะถูกไฟไหม้ (เหมือน devs ส่วนใหญ่) ฉันต้องการได้ยินจากโปรแกรมเมอร์ที่ใช้งานจริงกับปัญหาใด ๆ กับ GWT ซึ่งจะขัดขวางหรือ จำกัด มันใช้ภายในโดเมนปัญหาบางอย่าง

อะไรคือข้อโต้แย้งในการใช้ GWT และเพราะอะไร


11
ฉันคิดว่า GWT เสียชีวิต
Aaron McIver

1
@Aaron จริงเหรอ?
Jas

10
ฉันไม่แนะนำ GWT เป็นการส่วนตัว ความคิดนั้นบังคับให้คุณทำงานกับแอปพลิเคชันเดสก์ท็อป แต่จะทำให้คุณมีปัญหาในการพยายามคิดอย่างนั้นในฟังก์ชัน HTML ฉันเป็นแฟนของการจับคู่กระบวนทัศน์การเข้ารหัสกับปัญหาที่อยู่ในมือและสิ่งที่เป็นนามธรรมได้รับในทางของฉัน นี่คือเหตุผลว่าทำไมทุกครั้งที่ฉันเริ่มประเมินมันฉันตัดสินใจที่จะไม่ใช้มัน
Berin Loritsch

2
@Jas Experience กลับมาเมื่อสองสามปีที่แล้ว ในช่วงวัยทารกและรู้สึกว่ามันดิบมากในเวลานั้น มันเปลี่ยนไปไหม? บางที .... แต่ฉันพยายามเรียนรู้การวางโครงร่างอย่างช้าๆแทนที่จะพึ่งพากรอบตัวเอง ในตอนท้ายของวันมันเป็นเครื่องบดเนื้อสำหรับปั่นออก JS; ไม่ใช่ว่ามันเป็นสิ่งที่ไม่ดี แต่ไม่ใช่ที่ที่ฉันต้องการใช้ความพยายาม เฟรมเวิร์กจำนวนมากได้รับเลือกเนื่องจากขาดความรู้ด้านเทคโนโลยี X หรือบางสิ่งบางอย่าง ... แต่ในที่สุดคุณจะต้องมีความรู้ด้านเทคโนโลยี X ในบางช่วงเวลา .... อาจไปตามเส้นทางนั้นก่อน
Aaron McIver

10
ฉันมีความรู้ใน JS มากเขียนสิ่งที่ค่อนข้างจริงจังที่นั่น แต่ตอนนี้ฉันกำลังทำงานในโครงการที่สำคัญและฉันไม่สามารถที่จะเสียเวลาให้กับทีมงานระดับรองลงมาได้เนื่องจากข้อผิดพลาดที่เกิดจากการเปลี่ยนบริบทจาก Java เป็น JS ดังนั้นโปรดถ้าคุณมีตัวอย่างในโลกแห่งความเป็นจริงว่าทำไม GWT ไม่ได้ผลสำหรับคุณดังนั้นโปรดอธิบายด้วยมิฉะนั้นเราจะไม่เสียเวลาซึ่งกันและกันด้วยการอภิปรายที่มีสมมุติฐานและมีอัตนัยสูง
Jas

คำตอบ:


84

ฉันทั้งดีและไม่ดีที่จะตอบคำถามนี้ - ดีในการที่ฉันเคยใช้มาก่อนและไม่ดีว่าฉันเคยมีประสบการณ์กับ 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 เช่นพยายามเล่นเปียโนด้วยถุงมือมวย


2
ฉันรับรู้ถึงเหตุผลบางอย่างที่เราเลือกประตูผ่าน GWT เพื่อปิดงานนำเสนอ
biziclop

12
-1 สำหรับ FUD ประสบการณ์ของฉันกับ GWT ที่ใช้สำหรับแอปพลิเคชันขนาดเล็กและขนาดใหญ่เป็นวิธีที่เป็นบวกมากกว่าเชิงลบ และฉันไม่ได้พบ "ปัญหา" หนึ่งเดียวดังนั้นความคิดเห็น FUD เราประสบความสำเร็จในการฝัง GWT สร้างวิดเจ็ตลงในหน้า HTML ที่ซับซ้อนมากโดยใช้ความพยายามเพียงเล็กน้อย หากคุณรู้ว่าสิ่งที่คุณทำมันวิเศษถ้าคุณไม่ต้องการพิจารณาอาจจะมีวิธีที่ดีกว่าในการทำสิ่งต่าง ๆ แล้วทำตามคำตอบ "" นี้และไม่สนใจความคิดเห็นนี้

9
@Jarrod สิ่งเหล่านี้ไม่ใช่ "ปัญหา" ที่ต้องพบ แต่เป็นคำอธิบายธรรมดา ๆ ของธรรมชาติของ GWT ในกรณีที่มีความเกี่ยวข้องฉันได้ผ่านการรับรองว่าเป็นเชิงลบโดยเฉพาะภายในเลนส์ของเป้าหมายโครงการของเรา หากคุณมีประสบการณ์อื่นอย่าลังเลที่จะเขียนมัน ข้อมูลที่ไม่ได้รับการพิสูจน์เท่านั้นคือการอ้างสิทธิ์ของคุณว่า GWT เป็น "ใหม่และดีกว่า" โดยวิธี - ตั้งแต่ฉันเขียนคำตอบนี้ บริษัท (ฉันไม่ได้ทำงานอีกต่อไป) โยนงานของวิศวกรหลายปีและเขียนโครงการโดยไม่มี GWT ในเวลาน้อยลง
นิโคล

1
@JarrodRoberson ฉันเห็นด้วยกับ NickC จะดีมากถ้าได้อ่านประสบการณ์ของคุณอย่างละเอียด
funkybro

8
@NickC "ในเวลาน้อยลง" สำหรับการเขียนโครงการใหม่จะไม่นับเป็นการระเบิดครั้งใหญ่ของ GWT IMO โครงการใดก็ตามที่คุณกำลังทำซ้ำสิ่งที่เคยทำมาก่อนแม้แต่ในกรอบหรือภาษาที่แตกต่างกันก็ควรที่จะ "ใช้เวลาน้อยลง"
funkybro

24

เราใช้ GWT สำหรับเว็บแอปพลิเคชัน eGovernment ขนาดใหญ่ (SOA ในแบ็กเอนด์) ซึ่งมีการใช้งานจำนวนมาก UI เก่าอยู่ใน DHTML แต่เรามีปัญหาเกี่ยวกับความเข้ากันได้ของเบราว์เซอร์การเพิ่มประสิทธิภาพและกระบวนการพัฒนาดังนั้นเราจึงมองหาทางเลือกอื่น

ความต้องการของเรา:

  • เลเยอร์ UI ฝั่งไคลเอ็นต์เพื่อลดการโหลดเซิร์ฟเวอร์
  • เบราว์เซอร์ที่เข้ากันได้
  • RIA บนเว็บ
  • การเพิ่มประสิทธิภาพที่ง่าย
  • ไม่จำเป็นต้องติดตั้งปลั๊กอินไคลเอ็นต์ควรทำงานกับการติดตั้ง Windows แบบธรรมดา

เราเลือก GWT และฉันไม่เคยเสียใจเลย ทีมใหม่ไม่มีประสบการณ์ DHMTL ไม่มากก็น้อยกระบวนการ Java dev ของ GWT มีประโยชน์มาก สิ่งที่คุณได้จากกล่องคือ:

  • เบราว์เซอร์ที่เข้ากันได้
  • กระบวนการพัฒนาบน Java และการนำโค้ดกลับมาใช้ใหม่
  • ย่อขนาดคำขอให้สั้นที่สุด (ชุดรูปภาพ, ... )
  • แคชแบบก้าวร้าวง่าย (แอพใหม่จะถูกแคชไว้ที่ฝั่งไคลเอ็นต์)
  • การบีบอัด ressources ทั้งหมดง่าย ๆ (แม้จะมี js บน IE buggy รุ่นเก่า)
  • และอีกมากพูดถึงที่นี่

แอปพลิเคชันของเราออกคำขอไปยังเซิร์ฟเวอร์เพียงครั้งเดียวเมื่อเริ่มต้น ด้านลบคือ GWT (และ Android) มีการออกแบบที่ไม่ดี แต่ถ้าคุณใช้รูปลักษณ์และความรู้สึกของคุณเองคุณต้องปรับ CSS หรือคุณสามารถใช้ไลบรารีองค์ประกอบต่าง ๆ สำหรับ GWT ซึ่งทำให้ง่ายต่อการใช้สไตล์ที่เหมาะสมและชุดรูปแบบ

สำหรับฉันไม่มีประเด็นที่ HTML DOM อาจไม่ดีเท่างานฝีมือนี่ไม่เคยมีปัญหาเลย เมื่อฉันพัฒนาใน C ++ ฉันไม่ได้ดูรหัสแอสเซมเบลอร์ที่สร้างขึ้น เมื่อฉันพัฒนาใน GWT ไม่มีเหตุผลที่ฉันจะดูรหัส JS และเพียงเหตุผลเดียวที่จะดูที่ DOM และทำการปรับเปลี่ยนบางอย่าง

สำหรับฉัน GWT เป็นทางเลือกเดียวเมื่อพูดถึงการพัฒนา RIA และฉันหวังว่า GWT จะมีอนาคตที่สดใส ดูพันธกิจที่:

[1] http://code.google.com/intl/de-DE/webtoolkit/makinggwtbetter.html#introduction

แต่ก็ไม่ควรพูดถึงว่า Google ไม่ได้ใช้ GWT ในหลาย ๆ โครงการภายในและในขณะนี้มีข่าวลือเกี่ยวกับอนาคตของ GWT

[2] http://googlewebtoolkit.blogspot.com/2011/11/gwt-and-dart.html
[3] https://plus.google.com/105933370793992913359/posts/bLfSagtziBC

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.