Tôi vừa tốt vừa xấu khi trả lời câu hỏi này - tốt, ở chỗ tôi thực sự đã sử dụng nó trước đây và xấu, ở chỗ tôi đã khá có kinh nghiệm với HTML / CSS / JavaScript trước khi làm việc với GWT. Điều này khiến tôi phát điên khi sử dụng GWT theo cách mà các nhà phát triển Java khác, những người không thực sự biết về DHTML có thể không có được.
GWT thực hiện những gì nó nói - nó trừu tượng hóa JavaScript và ở một mức độ HTML nào đó thành Java. Đối với nhiều nhà phát triển, điều này nghe có vẻ tuyệt vời. Tuy nhiên, chúng tôi biết, như Jeff Atwood nói, tất cả các tóm tắt đều là trừu tượng không thành công (đáng để đọc nếu xem xét GWT). Với GWT, điều này đặc biệt giới thiệu các vấn đề sau:
Sử dụng HTML trong GWT hút.
Như tôi đã nói, ở một mức độ nào đó, thậm chí trừu tượng hóa HTML. Nghe có vẻ tốt cho một nhà phát triển Java. Nhưng nó không phải là. HTML là một định dạng đánh dấu tài liệu. Nếu bạn muốn tạo các đối tượng Java để xác định tài liệu, bạn sẽ không sử dụng các yếu tố đánh dấu tài liệu. Thật điên rồ dài dòng. Nó cũng không được kiểm soát đủ. Trong HTML về cơ bản có một cách để viết <p>Hello how are <b>you</b>?</p>
. Trong GWT, bạn có 3 nút con (văn bản B
, văn bản) được đính kèm vào một P
nút. Bạn có thể tạo P trước hoặc tạo các nút con trước. Một trong các nút con có thể là kết quả trả về của hàm. Sau một vài tháng phát triển với nhiều nhà phát triển, cố gắng giải mã tài liệu HTML của bạn trông như thế nào bằng cách truy tìm mã GWT của bạn là một quá trình gây đau đầu.
Cuối cùng, nhóm đã quyết định rằng có thể sử dụng HTMLPanel cho tất cả HTML là cách phù hợp. Bây giờ, bạn đã mất nhiều lợi thế của GWT khi có sẵn các phần tử cho mã Java để liên kết dễ dàng với dữ liệu.
Sử dụng CSS trong GWT hút.
Bằng cách đính kèm với trừu tượng HTML, điều này có nghĩa là cách bạn phải sử dụng CSS cũng khác nhau. Nó có thể đã được cải thiện kể từ lần cuối tôi sử dụng GWT (khoảng 9 tháng trước), nhưng tại thời điểm đó, hỗ trợ CSS là một mớ hỗn độn. Do cách thức GWT tạo cho bạn tạo HTML, bạn thường có các mức nút mà bạn không biết đã bị tiêm (bất kỳ nhà phát triển CSS nào cũng biết cách điều này có thể ảnh hưởng đáng kể đến kết xuất). Có quá nhiều cách để nhúng hoặc liên kết CSS, dẫn đến một mớ hỗn độn về không gian tên. Trên hết, bạn có hỗ trợ sprite, nghe có vẻ hay, nhưng thực sự đã làm biến đổi CSS của bạn và chúng tôi gặp vấn đề với việc viết các thuộc tính mà sau đó chúng tôi phải ghi đè lên một cách rõ ràng, hoặc trong một số trường hợp, đã cản trở những nỗ lực của chúng tôi để khớp với bàn tay của chúng tôi đã mã hóa CSS và phải thiết kế lại nó theo cách mà GWT không làm hỏng nó.
Liên minh các vấn đề, giao điểm của lợi ích
Bất kỳ ngôn ngữ nào cũng sẽ có bộ vấn đề và lợi ích riêng. Cho dù bạn sử dụng nó là một công thức trọng số dựa trên những. Khi bạn có một sự trừu tượng, những gì bạn nhận được là sự kết hợp của tất cả các vấn đề và sự giao thoa giữa các lợi ích. JavaScript có vấn đề và thường bị các kỹ sư phía máy chủ chế giễu, nhưng nó cũng có khá nhiều tính năng hữu ích để phát triển web nhanh. Hãy nghĩ rằng các bao đóng, tốc ký cú pháp, các đối tượng đặc biệt, tất cả những thứ được thực hiện bởi Jquery (như truy vấn DOM bằng bộ chọn CSS). Bây giờ hãy quên việc sử dụng nó trong GWT!
Tách biệt mối quan tâm
Chúng ta đều biết rằng khi quy mô của một dự án phát triển, việc phân tách các mối quan tâm là rất quan trọng. Một trong những điều quan trọng nhất là sự tách biệt giữa hiển thị và xử lý. GWT đã làm điều này thực sự khó khăn. Có lẽ không phải là không thể, nhưng đội tôi tham gia không bao giờ đưa ra một giải pháp tốt, và ngay cả khi chúng tôi nghĩ rằng chúng tôi có, chúng tôi luôn có một người bị rò rỉ vào đội kia.
Máy tính để bàn! = Web
Như @Berin Loritsch đã đăng trong các bình luận, mô hình hoặc suy nghĩ GWT được xây dựng cho các ứng dụng sống, trong đó một chương trình có màn hình sống kết hợp chặt chẽ với một công cụ xử lý. Điều này nghe có vẻ tốt bởi vì đó là điều mà rất nhiều người cảm thấy web đang thiếu. Nhưng có hai vấn đề: A) Web được xây dựng trên HTTP và điều này vốn đã khác nhau. Như tôi đã đề cập ở trên, các công nghệ được xây dựng trên HTTP - HTML, CSS, thậm chí tải tài nguyên và bộ đệm (hình ảnh, v.v.), đã được xây dựng cho nền tảng đó. B) Các nhà phát triển Java đã và đang làm việc trên web không dễ dàng chuyển sang tư duy ứng dụng máy tính để bàn này. Kiến trúc trong thế giới này là một ngành hoàn toàn khác nhau. Các nhà phát triển Flex có lẽ sẽ phù hợp với GWT hơn các nhà phát triển web Java.
Túm cái vạy lại là...
GWT có khả năng tạo ra các ứng dụng AJAX nhanh và bẩn khá dễ dàng chỉ bằng Java. Nếu nhanh và bẩn không giống như những gì bạn muốn, đừng sử dụng nó. Công ty tôi đang làm việc là một công ty quan tâm rất nhiều đến sản phẩm cuối cùng, và đó là cảm giác đánh bóng, cả về hình ảnh và tương tác, cho người dùng. Đối với chúng tôi, các nhà phát triển front-end, điều này có nghĩa là chúng tôi cần kiểm soát HTML, CSS và JavaScript theo cách sử dụng GWT như thử chơi piano với găng tay đấm bốc.