2010-11-10 18 views
24

Sono totalmente nuovo nello sviluppo web Java e mi piacerebbe scegliere un buon framework web Java per imparare. Ho trovato alcuni echi veramente buoni riguardo allo Apache Wicket framework e allo Playframework. Ho deciso di andare per uno di loro; ma ho bisogno di scegliere ;-)Wicket o Playframework?

Quindi, cosa scegliere e perché?

EDIT

mie esigenze:

  • ho avuto una buona esperienza di sviluppo con Django, quindi un quadro simile sarebbe grande,
  • Ho bisogno di un quadro che può interagire con l'altra corrente principale Benefici di Java (librerie, strumenti .. etc) in modo da poter sfruttare ciò che Java offre realmente.
+0

Quali sono i requisiti? – Mot

risposta

51

Wicket e Play sono due tipi di framework molto diversi.

Il gioco è un framework MVC che probabilmente sentirai familiare con l'arrivo di Django. Come Django, offre molto di più dei bit Web e fornisce un framework ORM basato su JPA, strumenti di scaffolding e probabilmente molto altro (non ho esperienza pratica con esso). Hanno un ottimo tutorial sul loro sito e probabilmente vedrai le somiglianze di Django lì.

Wicket è una struttura orientata ai componenti (come JSF e Tapestry) e si concentra fortemente sulla progettazione orientata agli oggetti. È anche MVC, di per sé, ma le pagine di solito sono costruite componendo componenti autosufficienti e riutilizzabili (View e Controller, Modelli collegabili). Questi componenti possono essere estesi con l'ereditarietà e composizione standard e il markup è molto ben separato dal codice e facilmente modificabile.

Wicket è in grado di gestire automaticamente callback e stato degli eventi, in modo da non avere per pensare a url, indipendentemente dalla complessità della pagina. Un esempio veloce per un pulsante cliccabile che va un via quando viene cliccato (molto utile):

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

voglio sottolineare che non c'è bisogno di utilizzare lo stato lato server, e che è del tutto possibile utilizzare Wicket come un "normale" framework MVC se lo si desidera (e sì, è facile ottenere bei URL).

Il progetto Wicket si concentra solo sul core framework web e non ci sono "sottigliezze" extra come supporto speciale o ponteggio ORM.Personalmente sono d'accordo con la filosofia del progetto Wicket qui, ma per i nuovi sviluppatori che arrivano al framework, fare cose "semplici" come una tabella ordinabile e pagabile può essere un po 'scoraggiante in quanto i componenti precostruiti sono un po' scarsi. La curva di apprendimento e produttività di Wicket può essere un po 'ripida, ma il lato positivo è che una volta che hai creato componenti (e "comportamenti" - una storia più lunga) che si adattano alle tue esigenze, sono estremamente riutilizzabili.

Sebbene io personalmente ami Wicket, ho la sensazione che probabilmente starai meglio con Play. La tua domanda indica che vuoi un "Django" con accesso alle librerie Java, e in tal caso penso che Play (o qualche altro Java MVC) sia la scelta sicura. D'altra parte, forse hai usato Django perché non sapevi quanto sia incredibilmente potente Wicket. ;) Se fornisci ulteriori informazioni sul tuo progetto, saremo in grado di fornire una risposta più qualificata.

Come nodo laterale: poiché Play non è molto mainstream (almeno per ora), prenderei anche in considerazione lo Grails che ha un forte sostegno commerciale e ancora più moduli predefiniti.

+0

Risposta molto informativa, grazie. – wassimans

17

Play! è progettato per essere comodo per gli sviluppatori provenienti da linguaggi di scripting come Python e PHP. Fornisce il proprio sistema di compilazione e script di gestione, un po 'come Rails o Django. Gli strumenti e le infrastrutture di build esistenti (come i repository Maven comunemente usati per la gestione delle dipendenze in Java-land) non si integreranno bene con Play.

Wicket sarà più comodo per gli sviluppatori provenienti dallo sviluppo del desktop in Java. Non fornisce strumenti speciali, quindi sarà più facile integrarlo in uno strumento di build specifico se si ha una preferenza (e ci sono molti strumenti di build che forniscono cose come il recupero automatico delle dipendenze disponibile nell'ecosistema Java.)

Quindi c'è una certa differenza tra le due opzioni :) Se riesci a capire quale esperienza ti avvantaggerebbe di più, la decisione dovrebbe essere abbastanza chiara da lì.

+1

ottima risposta! va dritto al punto della questione – opensas

+1

Bella risposta. Un MVC come Play sarà ovviamente più familiare agli utenti di altri MVC. Anche se devo dire che una volta che hai imparato il modo di vivere di Wicket, non vorrai più vedere un MVC! La natura orientata agli oggetti e guidata dagli eventi di Wicket, insieme al suo supporto AJAX integrato, ti consente di fare cose davvero complesse che sarebbero brutalmente disordinate e non mantenibili in un MVC. Anche l'internazionalizzazione è ottima in Wicket e non usare JSP è un vantaggio. :) – spaaarky21

7

Se il sistema è solo per il livello Web, gioca! quadro è molto adatto. But, se i modelli di dati non sono solo per il Web, forse exported as REST by Spring with CXF e sono utilizzati da GWT o altri servizi Web e si desidera assicurarsi che gli stati coerenti con il livello Web, Wicket (con Spring/hibernate) è una buona scelta.

Qualcosa che non mi piace tanto del gioco! è il meccanismo di memorizzazione nella cache. Devi nominare manualmente/inserire/recuperare/invalidare/eliminare la cache. Ciò renderà l'intera architettura soggetta a errori. Mentre wicket con spring/JPA (hibernate)/ehcache (o altri provider), è possibile definire un livello di caching/dao coerente per il livello superiore (web/REST ...), che non imporrà le incoerenze di stato.

Un altro vantaggio di wicket è il supporto AJAX integrato supportato da Java. Sebbene gli stati di AJAX siano mantenuti sul lato server (e forse un po 'lenti), se non vuoi imparare JavaScript, puoi comunque creare una pagina AJAX' non così pessima '.

Con Play! Se non conosci JS e non vuoi impararlo, non vuoi manipolare DOM ingombranti, puoi solo costruire un sito 'medio'. OTOH, se sei esperto di JS/jQuery, puoi scegliere Gioca! .

+0

potresti approfondire un po 'le incongruenze della cache e come wicket le gestisce? Mi piacerebbe sapere come potrebbe migliorare la gestione della cache. Grazie. – opensas

+0

Ciao, puoi fare riferimento alla mia slide di slides: http://www.slideshare.net/smallufo/play-framework-for-javaee-developers. A partire da pagina 40. – smallufo

+0

materiale eccellente, smallufo. btw, l'approccio a pagina 61 funziona bene ???ci dovrebbe essere un'impostazione in application.conf per raggiungere questo ... Ho avuto un problema simile e l'ho gestito con il mio sistema cache, aggiungendo "dipendenze". Vorrei che entrambi gli elementi memorizzati nella cache dipendessero da "utente", e ogni volta che un utente viene modificato (o aggiunto o eliminato) invaliderei ogni voce a seconda dell'utente. Sfortunatamente, avere un tale sistema di dipendenza non è così facile con ehcache. – opensas

3

Sto usando PLay! molto e ho usato Wicket per un po 'di valutazione. La mia esperienza è che devi scrivere molto più codice per fare lo stesso lavoro con Wicket. Hai più "indirezione" con Wicket. Personalmente preferisco il codice che ha il minimo di "cerimonia" e che è facile da seguire.

The Play! gli architetti aggiungono anche il supporto di Scala a Play !, che ritengo sia una grande idea, dal momento che Scala è completamente interoperabile con il codice e le librerie Java ma molto più avanzato di Java.

+1

Ultime parole famose! Akka supporta anche sia l'API Scala che Java, ma ritengo che l'API Java sia "l'ospite in casa", cioè non è ben supportata come Scala. Forse gioca! adoreranno i loro utenti Java di più ... –