2010-11-10 21 views
24

Soy totalmente nuevo en el desarrollo web Java y me gustaría elegir un buen framework web Java para aprender. He encontrado algunos ecos muy buenos con respecto al Apache Wicket framework y el Playframework. Decidí ir por uno de ellos; pero tengo que elegir ;-)Wicket o Playframework?

Entonces, ¿qué elegir y por qué?

EDIT

Mis requisitos:

  • yo tuvimos una buena experiencia en el desarrollo con Django, por lo que un marco similar sería grande,
  • Necesito un marco que puede interactuar con la otra corriente principal Obsequios de Java (bibliotecas, herramientas, etc.) para poder aprovechar lo que Java realmente ofrece.
+0

¿Cuáles son sus requisitos? – Mot

Respuesta

51

Wicket and Play son dos tipos de marcos muy diferentes.

Play es un framework MVC con el que probablemente se sienta familiar desde Django. Al igual que Django, ofrece algo más que solo los bits web y proporciona un marco ORM basado en JPA, herramientas de andamios y probablemente mucho más (no tengo experiencia práctica con él). Tienen un gran tutorial en su sitio, y probablemente veas las similitudes de Django allí.

Wicket es un marco orientado a componentes (como JSF y Tapestry) y se centra principalmente en el diseño orientado a objetos. También es MVC, per se, pero las páginas generalmente se crean componiendo componentes autocontenidos y reutilizables (Vista y Controlador, Modelos conectables). Estos componentes se pueden extender por herencia y composición estándar y el marcado se separa muy limpiamente del código y se modifica fácilmente.

Wicket puede gestionar las devoluciones de eventos y el estado de forma automática, de modo que no se tenga para pensar en las urls, sin importar cuán compleja sea su página. Un ejemplo rápido de un botón que se pulse que va un lejos cuando se hace clic (muy útil):

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

quiero hacer hincapié en que no tiene que utilizar el estado del lado del servidor, y que es perfectamente posible utilizar Wicket como un marco MVC "normal" si lo desea (y sí, es fácil obtener URLs bonitas).

El proyecto Wicket se centra solo en el marco web central y no hay "detalles" adicionales como soporte especial de ORM o andamios.Personalmente, estoy de acuerdo con la filosofía del proyecto Wicket aquí, pero para los nuevos desarrolladores que llegan al marco, hacer cosas "simples" como una tabla ordenable y ordenable puede ser un poco desalentador ya que los componentes preconstruidos son un poco escasos. La curva de aprendizaje y productividad para Wicket puede ser un poco abrupta, pero lo bueno es que una vez que ha creado los componentes (y "comportamientos", una historia más larga) que se ajustan a sus necesidades, son extremadamente reutilizables.

Aunque personalmente amo Wicket, tengo la corazonada de que probablemente sea mejor con Play. Su pregunta indica que desea un "Django" con acceso a libs de Java, y en ese caso creo que Play (o algún otro Java MVC) es la opción segura. Por otro lado, tal vez has estado usando Django porque no sabías cuán increíblemente poderoso es Wicket. ;) Si proporciona más información sobre su proyecto, podremos dar una respuesta más calificada.

Como un nodo lateral: como Play no es muy común (al menos por ahora), también consideraría Grails que tiene un fuerte respaldo comercial y aún más módulos listos para usar.

+0

Respuesta muy informativa, gracias. – wassimans

17

Play! está diseñado para ser cómodo para desarrolladores provenientes de lenguajes de scripting como Python y PHP. Proporciona su propio sistema de compilación y scripts de gestión, algo así como lo haría Rails o Django. Las herramientas y la infraestructura de compilación existentes (como los repositorios Maven comúnmente utilizados para la administración de dependencias en Java-land) no se integrarán bien con Play.

Wicket será más cómodo para los desarrolladores provenientes del desarrollo de escritorio en Java. No proporciona herramientas especiales, por lo que será más fácil integrarse en una herramienta de compilación específica si tiene una preferencia (y hay muchas herramientas de compilación que proporcionan cosas como la recuperación automática de dependencias disponible en el ecosistema de Java).

Por lo tanto hay bastante diferencia entre las dos opciones :) Si puede averiguar qué experiencia lo beneficiaría más, la decisión debería ser bastante clara a partir de ahí.

+1

¡excelente respuesta! va directo al punto de la cuestión – opensas

+1

Nice response. Un MVC como Play obviamente será más familiar para los usuarios de otros MVC. Aunque tengo que decir que una vez que aprendas la forma de vida de Wicket, ¡nunca más querrás ver un MVC! La naturaleza orientada a objetos y orientada a eventos de Wicket, junto con su compatibilidad incorporada con AJAX, te permite hacer cosas realmente complejas que serían brutalmente complicadas e imposibles de mantener en un MVC. La internacionalización también es excelente en Wicket y no usar JSP también es un plus. :) – spaaarky21

7

Si su sistema es solo para nivel web, ¡juega! el marco es muy adecuado. But, si sus modelos de datos no son solo para web, quizás exported as REST by Spring with CXF, y consumidos por GWT u otros servicios web, y quiere asegurarse de que los estados consistentes con nivel web, Wicket (con Spring/hibernate) es una buena opción.

Algo que no me siento tan bien acerca de Play! es el mecanismo de almacenamiento en caché Debe nombrar manualmente/insertar/recuperar/invalidar/purgar el caché. Esto hará que toda la arquitectura sea propensa a errores. Mientras wicket con Spring/JPA (hibernate)/ehcache (u otros proveedores), puede definir la capa de caché/dao consistente para la capa superior (web/REST ...), lo que no impone incoherencias de estado.

Otra ventaja de wicket es que tiene soporte AJAX incorporado respaldado por Java. Aunque estos estados de AJAX se mantienen en el lado del servidor (y tal vez un poco lento), si no desea aprender JavaScript, puede construir una página AJAX "no tan mala".

¡Con Play! , Si no sabe nada sobre JS y no quiere aprenderlo, no quiere manipular DOM engorrosos, solo puede crear un sitio "promedio". OTOH, si eres experto en JS/jQuery, puedes elegir Play! .

+0

¿Podría explicar un poco más sobre las inconsistencias de la memoria caché y cómo wicket las maneja? Me gustaría saber cómo podría jugar para mejorar su gestión del caché. Gracias. – opensas

+0

Hola, puedes consultar mi slideshare: http://www.slideshare.net/smallufo/play-framework-for-javaee-developers. A partir de la página 40. – smallufo

+0

excelente material, smallufo. por cierto, el enfoque en la página 61 funciona bien ???debería haber una configuración en application.conf para lograr esto ... tuve un problema similar y lo manejé con mi propio sistema de caché, agregando "dependencias". Haría que los dos elementos almacenados en caché dependan del "usuario", y cada vez que se modifique (o agregue o elimine) a un usuario, invalidaría cada entrada en función del usuario. Desafortunadamente, tener un sistema de dependencia de este tipo no es tan fácil con ehcache. – opensas

3

¡Estoy usando PLay! mucho y han usado Wicket para un poco de evaluación. Mi experiencia es que tiene que escribir mucho más código para hacer el mismo trabajo con Wicket. Tienes más "indirección" con Wicket. Personalmente prefiero el código que tiene la "ceremonia" lo menos posible y es fácil de seguir.

The Play! los arquitectos también están agregando soporte de Scala a Play !, que creo que es una gran idea, ya que Scala es totalmente interoperable con el código y las bibliotecas de Java, pero mucho más avanzado que Java.

+1

Famosas últimas palabras! Akka también es compatible tanto con Scala como con la API de Java, pero créame que Java API es "el invitado en la casa", es decir, no es tan compatible como Scala one. Tal vez jugar! les encantará a sus usuarios de Java más ... –