2010-11-10 29 views
24

Tôi hoàn toàn mới để phát triển web Java và tôi muốn chọn một khung web Java tốt để tìm hiểu. Tôi đã tìm thấy một số tiếng vang thực sự tốt về số Apache Wicket framework và số Playframework. Tôi quyết định đi tìm một trong số họ; nhưng tôi cần phải chọn ;-)Wicket hoặc Playframework?

Vì vậy, chọn gì và tại sao?

EDIT

yêu cầu của tôi:

  • Tôi đã có một trải nghiệm thú vị đang phát triển với Django, do đó, một khuôn khổ tương tự sẽ là tuyệt vời,
  • Tôi cần một khuôn khổ có thể tương tác với chính khác Các tính năng của Java (thư viện, công cụ ..etc) để tôi có thể tận dụng những gì Java thực sự cung cấp.
+0

Yêu cầu của bạn là gì? – Mot

Trả lời

51

Wicket và Play là hai loại khung công tác rất khác nhau.

Phát là khung MVC mà bạn có thể sẽ cảm thấy quen thuộc khi đến từ Django. Giống như Django, nó cung cấp nhiều hơn chỉ là các bit web và cung cấp một khung công tác dựa trên JPA dựa trên ORM, các công cụ giàn giáo và có thể nhiều hơn nữa (tôi không có kinh nghiệm thực tế với nó). Họ có một hướng dẫn tuyệt vời trên trang web của họ, và bạn có thể sẽ thấy những điểm tương đồng của Django ở đó.

Wicket là một khung định hướng thành phần (như JSF và Tapestry) và tập trung nhiều vào thiết kế hướng đối tượng. Nó cũng là MVC, mỗi trang, nhưng các trang thường được xây dựng bằng cách soạn các thành phần khép kín và có thể tái sử dụng (View and Controller, pluggable Models). Các thành phần này có thể được mở rộng bằng cách thừa kế và thành phần tiêu chuẩn và đánh dấu rất tách biệt với mã và dễ dàng sửa đổi.

Wicket có thể quản lý cuộc gọi lại sự kiện và tự động nêu, để bạn không để suy nghĩ về url, bất kể trang của bạn phức tạp đến mức nào. Một ví dụ nhanh chóng cho một nút bấm mà đi một đi khi được nhấp vào (rất hữu ích):

// In a page constructor 
    add(new Link("link") { 
     public void onClick() { 
      setVisible(false); 
     } 
    }); 

Tôi muốn nhấn mạnh rằng bạn không cần phải sử dụng trạng thái server-side, và rằng nó hoàn toàn có thể sử dụng Wicket là một khung MVC "bình thường" nếu bạn muốn (và có, thật dễ dàng để có được các url khá).

Dự án Wicket chỉ tập trung vào khung web cốt lõi và không có thêm "niceties" như hỗ trợ ORM đặc biệt hoặc giàn giáo.Cá nhân tôi đồng ý với triết lý của dự án Wicket ở đây, nhưng đối với các nhà phát triển mới tham gia vào khuôn khổ, việc thực hiện các công cụ "đơn giản" như bảng có thể sắp xếp và có thể sắp xếp có thể hơi khó khăn vì các thành phần được xây dựng trước hơi khan hiếm. Đường cong học tập và năng suất cho Wicket có thể hơi dốc, nhưng ngược lại là khi bạn đã tạo thành phần (và "hành vi" - câu chuyện dài hơn) phù hợp với nhu cầu của bạn, chúng cực kỳ có thể tái sử dụng được.

Mặc dù cá nhân tôi yêu Wicket, tôi có linh cảm mà bạn có thể sẽ thích hợp nhất với Play. Câu hỏi của bạn chỉ ra rằng bạn muốn có một "Django" với quyền truy cập vào các thư viện Java, và trong trường hợp đó tôi nghĩ Play (hoặc một số Java MVC khác) là sự lựa chọn an toàn. Mặt khác, có thể bạn đã sử dụng Django vì bạn không biết Wicket mạnh mẽ đến mức nào. ;) Nếu bạn cung cấp thêm một số thông tin về dự án của mình, chúng tôi sẽ có thể cung cấp phản hồi có chất lượng hơn.

Là một nút phụ: Vì Play không phải là rất chính thống (ít nhất là bây giờ), tôi cũng xem xét Grails có sự ủng hộ thương mại mạnh mẽ và thậm chí nhiều mô-đun out-of-the-box.

+0

Câu trả lời rất nhiều thông tin, cảm ơn bạn. – wassimans

17

Phát! được thiết kế để thoải mái cho các nhà phát triển đến từ các ngôn ngữ kịch bản như Python và PHP. Nó cung cấp hệ thống xây dựng riêng của mình và các kịch bản quản lý, giống như Rails hoặc Django. Các công cụ và cơ sở hạ tầng hiện có (như kho lưu trữ Maven thường được sử dụng để quản lý sự phụ thuộc trong Java-land) sẽ không tích hợp tốt với Play.

Wicket sẽ thoải mái hơn cho các nhà phát triển đến từ phát triển máy tính để bàn trong Java. Nó không cung cấp công cụ đặc biệt, vì vậy sẽ dễ dàng tích hợp vào một công cụ xây dựng cụ thể nếu bạn có sở thích (và có nhiều công cụ xây dựng cung cấp những thứ như truy xuất phụ thuộc tự động có sẵn trong hệ sinh thái Java.)

Vì vậy, có khá nhiều sự khác biệt giữa hai tùy chọn :) Nếu bạn có thể tìm ra trải nghiệm nào sẽ mang lại lợi ích cho bạn nhiều nhất, quyết định phải khá rõ ràng từ đó.

+1

câu trả lời tuyệt vời! đi thẳng đến điểm của vấn đề – opensas

+1

Phản hồi tốt đẹp. Một MVC như Play rõ ràng sẽ quen thuộc hơn với người dùng MVC khác. Mặc dù tôi phải nói rằng một khi bạn học cách sống của Wicket, bạn sẽ không bao giờ muốn gặp lại MVC nữa! Bản chất hướng đối tượng, sự kiện định hướng của Wicket, cùng với sự hỗ trợ AJAX được tích hợp sẵn của nó, cho phép bạn thực hiện một số công cụ phức tạp thực sự sẽ lộn xộn và không thể duy trì trong một MVC. Quốc tế hóa cũng là tuyệt vời trong Wicket và không sử dụng JSP cũng là một lợi thế. :) – spaaarky21

7

Nếu hệ thống của bạn chỉ dành cho tầng Web, hãy chơi! khuôn khổ là rất phù hợp. But, nếu mô hình dữ liệu của bạn không chỉ dành cho web, có thể là exported as REST by Spring with CXF và được tiêu thụ bởi GWT hoặc các dịch vụ web khác và bạn muốn đảm bảo các trạng thái nhất quán với cấp web, Wicket (với Spring/hibernate) là một lựa chọn tốt.

Điều gì đó tôi không cảm thấy thú vị về Play! là cơ chế lưu bộ nhớ đệm. Bạn phải đặt tên/insert/retrieve/invalidate/purge cache theo cách thủ công. Điều này sẽ làm cho toàn bộ kiến ​​trúc dễ bị lỗi. Trong khi wicket với spring/JPA (hibernate)/ehcache (hoặc các nhà cung cấp khác), bạn có thể định nghĩa lớp đệm/dao nhất quán cho lớp trên (web/REST ...), điều này sẽ không áp đặt sự mâu thuẫn của nhà nước.

Một ưu điểm khác với wicket là nó đã tích hợp sẵn hỗ trợ AJAX được hỗ trợ bởi Java. Mặc dù các trạng thái của AJAX được duy trì ở phía máy chủ (và có thể hơi chậm chạp), nếu bạn không muốn học JavaScript, bạn vẫn có thể xây dựng một trang AJAX 'không-để-xấu'.

Với Play! , Nếu bạn không biết về JS, và không muốn tìm hiểu nó, không muốn thao tác DOM cồng kềnh, bạn chỉ có thể xây dựng một trang web 'trung bình'. OTOH, nếu bạn có kỹ năng với JS/jQuery, bạn có thể chọn Play! .

+0

bạn có thể giải thích thêm một chút về sự không thống nhất của bộ nhớ đệm và cách xử lý wicket không? Tôi muốn biết làm thế nào có thể chơi cải thiện quản lý bộ nhớ cache của nó. cảm ơn. – opensas

+0

Xin chào, bạn có thể tham khảo slideshare của tôi: http://www.slideshare.net/smallufo/play-framework-for-javaee-developers. Bắt đầu từ trang 40. – smallufo

+0

chất liệu tuyệt vời, smallufo. btw, cách tiếp cận trên trang 61 hoạt động ok ???nên có một thiết lập trong application.conf để đạt được điều này ... Tôi đã có một vấn đề tương tự và tôi xử lý nó với hệ thống bộ nhớ cache của riêng tôi, thêm "phụ thuộc". Tôi sẽ làm cho cả hai mục lưu trữ phụ thuộc vào "người dùng", và mọi người dùng bất kỳ được sửa đổi (hoặc thêm hoặc xóa) tôi sẽ làm mất hiệu lực mỗi mục tùy thuộc vào người dùng. Thật không may, có một hệ thống phụ thuộc như vậy không phải là quá dễ dàng với ehcache. – opensas

3

Tôi đang sử dụng PLay! rất nhiều và đã sử dụng Wicket cho một chút đánh giá. Kinh nghiệm của tôi là, bạn phải viết nhiều mã hơn để hoàn thành công việc với Wicket. Bạn có nhiều "indirection" với Wicket. Cá nhân tôi thích mã có càng ít càng tốt "lễ" và đó là dễ làm theo.

Phát! các kiến ​​trúc sư cũng đang thêm hỗ trợ Scala vào Play !, mà tôi nghĩ là một ý tưởng tuyệt vời, vì Scala hoàn toàn tương thích với mã Java và các thư viện nhưng bằng Java nâng cao hơn nhiều.

+1

Từ cuối cùng nổi tiếng! Akka cũng hỗ trợ cả Scala và Java API nhưng tôi tin rằng Java API là "khách trong nhà", tức là nó không được hỗ trợ tốt như Scala. Có thể chơi! sẽ yêu người dùng Java của họ nhiều hơn ... –