quickstart examples java model-view-controller spring wicket

java - examples - ¿Cuáles son las ventajas de Apache Wicket?



wicket apache (10)

No soy un desarrollador de Java, así que podría obtener algunos términos incorrectos ... pero.

Una aplicación que integro se está moviendo de Spring a Wicket. Si bien no debería afectar mi integración con él, me pregunté por qué harían esto.

Por lo que sé, Spring es el marco más popular. No sé nada al respecto, excepto que es popular. Leí la página de Wicket y Wicket parece muy simple y directo.

¿Cuáles son algunas de las ventajas de Wicket?

Me parece que cambiar el marco completo sería algo de trabajo, así que me pregunto si Wicket ofrece algo que Spring no ofrece.



Estas son algunas de las características de wicket de apache:

Modelo de Componente POJO

Las páginas y los componentes en Wicket son objetos reales de Java que admiten encapsulación, herencia y eventos.

Facilidad de desarrollo

Debido a que Wicket es Java y HTML, puede aprovechar lo que sabe sobre Java o su editor HTML favorito para escribir aplicaciones Wicket.

Separación de intereses

Wicket no mezcla el marcado con código Java y no agrega ninguna sintaxis especial a sus archivos de marcado. Los mundos de HTML y Java son paralelos y están asociados solo con los identificadores de Wicket, que son atributos en HTML y las propiedades de los componentes en Java. Dado que Wicket HTML es solo HTML y Wicket Java es solo Java, los programadores y diseñadores pueden trabajar independientemente en gran medida y sin depender de ninguna herramienta especial.

Seguro

Wicket es seguro por defecto. Las URL no exponen información sensible y todas las rutas de componentes son relativas a la sesión. Deben tomarse pasos explícitos para compartir información entre sesiones. Además, el cifrado de URL permite sitios web altamente seguros.

Soporte de agrupamiento transparente y escalable

Todas las aplicaciones de Wicket trabajarán en un clúster automáticamente y sin trabajo adicional. Una vez que se comprenden los cuellos de botella, Wicket habilita el ajuste de la replicación del estado de la página. La próxima versión de Wicket admitirá modelos del lado del cliente para la escalabilidad de estado cero.

Ayuda transparente del botón trasero

Wicket admite la gestión de versiones de páginas configurables. Cuando los usuarios envían un formulario o siguen un enlace de una página a la que accedieron con el botón Atrás en su navegador, Wicket puede revertir el objeto de la página al estado en que se encontraba cuando la página se procesó originalmente. Esto significa que puede escribir aplicaciones web que admiten el botón Atrás con muy poco trabajo.

Soporte de múltiples pestañas y ventanas múltiples

Wicket proporciona una forma sencilla de escribir aplicaciones que admite el uso de varias ventanas y varias pestañas, lo que permite al desarrollador reaccionar de forma adecuada cuando los usuarios abren una nueva ventana o pestaña del navegador.

Componentes reutilizables

Los componentes reutilizables en Wicket son particularmente fáciles de crear. No solo puede ampliar los componentes existentes con la palabra clave extends de Java, sino que también puede crear componentes del Panel que asocian un grupo de componentes como una unidad reutilizable.

Validación de formulario simple, flexible y localizable

Es trivial escribir y usar validadores en Wicket. También es bastante fácil personalizar y localizar la pantalla y el contenido de los mensajes de error de validación.

Sesiones tipo seguro

Wicket elimina la necesidad de administrar los atributos HttpSession a mano. Los objetos de la página y del componente se almacenan de forma transparente en la sesión y su aplicación puede crear una subclase de sesión personalizada con propiedades de tipo seguro también. Todos los objetos almacenados en la sesión pueden participar automáticamente en la replicación de clústeres.

Fábrica personalizable

Wicket es muy extensible. La mayoría de las operaciones se pueden personalizar a través de fábricas o métodos de fábrica.

Modelos desmontables

Los objetos de modelo en Wicket pueden ser muy livianos en términos de memoria y uso de red en un clúster. Cuando se utiliza un modelo, se puede "adjuntar", llenándose con información del almacenamiento persistente. Cuando el modelo ya no está en uso, la información transitoria se puede restablecer, reduciendo el tamaño del objeto.

Componentes de borde

Los componentes de Wicket Border permiten la decoración de páginas de forma reutilizable. Esto es especialmente útil para la herencia de estructuras de navegación comunes o diseño.

Soporte para todas las características básicas de HTML

Wicket admite etiquetas de imagen, enlaces, formularios y todo lo demás que está acostumbrado a usar en el desarrollo de su aplicación web.

Manipulación programática de atributos

Wicket Components puede cambiar programáticamente cualquier atributo de etiqueta HTML.

Conversiones automáticas

Una vez que un Formulario valida, el modelo se puede actualizar usando convertidores Wicket. La mayoría de las conversiones ordinarias están integradas y es fácil escribir nuevos convertidores.

Imágenes Dinámicas

Wicket hace que usar, compartir y generar imágenes sea muy fácil. Las imágenes dinámicas se pueden crear simplemente implementando un método de pintura.

ListView en página

Las ListViews en Wicket son extremadamente poderosas. Puede anidar cualquier tipo de componente en una fila ListView, incluso en otras ListViews. PageableListView admite enlaces de navegación para las listas grandes.

Componente de árbol

Componente de árbol fuera de la caja para navegar y seleccionar nodos.

Localización

Las páginas HTML, las imágenes y las cadenas de recursos pueden ser localizadas.


Estoy de acuerdo con las respuestas proporcionadas hasta el momento. Lo que no se ha mencionado son los siguientes puntos, que son consecuencia del enfoque de Wicket de desarrollo de aplicaciones web centrado en el código Java: -

  • El desarrollo de wicket no implica escribir JSP.
  • Los componentes AJAX se pueden desarrollar sin incluir la escritura de Javascript.

No he encontrado ningún otro marco que tenga este enfoque centrado en Java. Todos los otros que he usado (Struts, Spring) involucran el desarrollo de JSP.

Para mí, una gran ventaja de Wicket es el enfoque en Java y la disponibilidad de herramientas ricas en entornos de desarrollo como Eclipse. También la separación muy clara de la lógica empresarial de los aspectos de presentación de la aplicación.


Las ventajas que a menudo se promocionan en círculos que frecuento son:

  1. Su html puede ser totalmente compatible con xhtml: hay una muy buena separación entre presentación y lógica, ya que lo único que su capa de presentación / html necesita saber sobre el wicket son los atributos de wicketid en las etiquetas html estándar. Esto es maravilloso para el tipo del lado del cliente html / css / javascript en su equipo que hace poco o nada de trabajo real de Java. Ningún otro framework web basado en Java puede reclamar esto, afaik.
  2. Sin configuración xml para nada específico de wicket: todo se puede hacer en el origen y se necesita hacer muy poco para el web.xml estándar para su .war
  3. El desarrollo basado en componentes es bastante fácil de asimilar, especialmente si tiene un fondo no web (por ejemplo, un programador de swing). fomenta la reutilización un poco más que mvc, imo.

Otra ventaja de Wicket sobre otros frameworks web populares de Java es que le permite crear aplicaciones web modulares y extensibles. Esto es particularmente útil cuando está diseñando un producto basado en la web, que tiene la intención de ampliar agregando funcionalidad extra y páginas en forma de complementos en el momento del despliegue, y eliminando el impacto en la funcionalidad / fuente central de su producto. Aquí hay un muy buen artículo sobre esto.

http://www.infoq.com/articles/modular-wicket


Puede leer sobre las ventajas de usar Wicket en el primer capítulo gratuito de Wicket In Action: http://www.manning.com/dashorst/

En resumen, Wicket es un gran marco cuando la aplicación que estás desarrollando es relativamente compleja, quieres que sea mantenible, puedes escalar el equipo y aprovechar la reutilización. La programación orientada a objetos demostró ser un paradigma muy útil para programar IU, pero desafortunadamente, la mayoría de los frameworks Java para desarrollar aplicaciones web, incluyendo Spring MVC, solo soportan un modelo de programación muy procedural donde etiquetan el término MVC para que suene genial (pero de hecho, dado que la granularidad que admiten son viajes de ida y vuelta de solicitud / respuesta en lugar de widgets autónomos, MVC es realmente engañoso).

La parte DI de Spring es excelente, y es algo que puedes usar fácilmente junto con Wicket.


Spring es más completo que Wicket.

Wicket es un framework de interfaz de usuario web de Java. Spring también tiene uno, junto con módulos de persistencia, comunicación remota, seguridad, mensajería, etc.

Spring está basado en inyección de dependencia y AOP. Wicket no tiene ninguno.

No lo he usado, pero se supone que es simple. No puedo decir si Spring es más fácil o más difícil.

Puede usar Spring para obtener buenas ventajas en muchas situaciones además de las aplicaciones web.


Spring es más que Spring MVC. Puede (y probablemente debería) usar Spring con Wicket.


Spring le ofrece el patrón de diseño MVC solo en el nivel de la página, un nivel de granularidad muy grueso. Wicket, por el contrario, le da el patrón de diseño de MVC en el nivel de componente individual (muy parecido a lo que ofrece Swing para la programación de clientes gordos). Con Spring MVC, todos los datos de un formulario son globales para todo el servlet frontal, por lo que no hay muchas oportunidades para ocultar información, un acoplamiento flexible o una cohesión estrecha. Con Wicket, su lógica de visualización puede ser mucho más modular: los datos gestionados por el componente A no necesitan ser visibles para el código del componente B.

El nivel más pequeño de granularidad hace que sea mucho más fácil reutilizar el código de visualización en varias páginas web diferentes o incluso en aplicaciones web.

Además, como la configuración de los componentes se realiza en Java en lugar de en XML, se pueden configurar sobre la marcha en tiempo de ejecución, lo que permite una mayor potencia y flexibilidad (en contraste con la mayoría de otros marcos orientados a componentes como ASP.NET Web Forms o Java Server Faces).


Wicket rocas!

Spring (la parte de la interfaz de usuario se llama Spring MVC) parece ser un mega, ''hacer todo, incluido el fregadero de la cocina'', tipo de marco que lo hacía parecer enorme y difícil de manejar cuando comencé a evaluar Spring (y Spring MVC). Hoy en día, Spring no parece estar enfocado en una sola cosa. Originalmente, creo que era simplemente un marco de inyección de dependencia, pero creció rápidamente para tratar de ser todo para todas las personas y se perdió la simplicidad.

Los libros que leí en Spring tenían ejemplos que contenían demasiada configuración de XML. Los errores en los archivos de configuración de XML son mucho más difíciles de depurar y corregir que los errores en el código de Java, que puede pasar por un solo paso con su depurador.

¿Qué hay de malo en declarar cosas en código Java en lugar de XML de todos modos? Desde cuando alguien decretó que todo debería declararse en XML de todos modos. Si te gusta nadar en un mar de archivos complejos de configuración XML, entonces ve con Spring. Si le gusta terminar el trabajo y ser productivo, entonces vaya con Wicket.

Wicket está muy centrado en ser el mejor marco de interfaz de usuario basado en Java para el desarrollo de aplicaciones web. No intenta encerrarlo en ningún marco de inyección de dependencia particular o en un marco de persistencia particular (utilícelo con JDO / JPA, DataNucleus, Hibernate, lo que sea).

Su enfoque está claramente en la interfaz de usuario, pero puede usar cualquier marco de inyección de dependencia que desee (no tiene que usar la DI de Spring con él, pero puede hacerlo si lo desea). Incluso usamos nuestra propia DI ( http://www.expojo.com ) con Wicket y todo es funky.