Usando MVC en una aplicación Java

10

Necesito escribir una aplicación GUI multiplataforma para procesar (en múltiples hilos) y visualizar cantidades bastante grandes de datos. Idealmente, la aplicación debería ser relativamente rápida y verse bien.

La interfaz de la aplicación consistirá en un widget de tabla, un widget de árbol y un widget de dibujo de figuras personalizado. El usuario podrá modificar los datos de cualquiera de estos widgets y los cambios deben reflejarse inmediatamente en los otros widgets.

Naturalmente, estoy planeando usar MVC. Sin embargo, normalmente hago toda mi programación GUI en C ++ / Qt, y tengo una exposición muy limitada a Java. Así que realmente agradecería cualquier consejo sobre cómo organizar una aplicación de este tipo en Java. En particular, ¿debo usar Swing o JavaFX? ¿Qué widgets elegirías para el trabajo? ¿Podría recomendar libros / tutoriales en línea que cubran estos aspectos de la plataforma Java?

Agradeceré mucho cualquier comentario. ¡Gracias!

(Esta pregunta se publicó originalmente en Stack Overflow , pero este sitio se sugirió como un lugar más apropiado para preguntar)

egor
fuente

Respuestas:

21

Todo esto es muy subjetivo, ya que múltiples tecnologías diferentes podrán satisfacer sus necesidades.

Al igual que otros, probablemente recomiendo la tecnología que personalmente preferiría para un proyecto de este tipo, que sería JavaFX .

Las razones por las que recomendaría JavaFX son:

OK, supongo que lo anterior es un poco tangente, pero me gusta promover JavaFX ;-)

De todos modos, para abordar los puntos específicos en su pregunta:

  • JavaFX es un marco GUI multiplataforma (actualmente Mac / Windows / Linux).
  • JavaFX tiene soporte incorporado de subprocesos múltiples de alta calidad (el marco central en sí mismo es de un solo subproceso como lo es casi cualquier otra plataforma GUI, pero puede definir sus propias tareas para que se ejecuten simultáneamente fuera del hilo GUI para que el hilo GUI permanezca sensible).
  • Un programa JavaFX bien escrito no debería tener problemas para funcionar lo suficientemente bien como para visualizar cantidades bastante grandes de datos. Aquí hay un proyecto JavaFX de muestra que hace eso.
  • La capacidad de diseñar la aplicación a través de CSS, hacer uso de efectos visuales y animación, le permite trabajar con diseñadores para que su aplicación se vea genial o hágalo usted mismo si tiene las habilidades.
  • JavaFX tiene un TableView y un TreeView que puede usar. También hay un control combinado de TreeTable que se ha desarrollado en preparación para el lanzamiento de Java 8 .
  • El widget de dibujo de figuras personalizado podría usar formas de gráficos de escenas o un lienzo de dibujo directo ; en realidad, es solo una cuestión de estilo de codificación y preferencia.
  • Las propiedades y las funciones de enlace de JavaFX junto con sus marcos de escucha de eventos hacen que sea trivial modificar datos usando un control y que los cambios se reflejen inmediatamente en otros controles.
  • Para el desarrollo de estilo MVC, puede escribir su modelo usando objetos java simples, definir su vista usando el lenguaje de marcado FXML (creado usando la herramienta de diseño gráfico SceneBuilder si lo desea) y definir su lógica de control en Java (u otro lenguaje de script si lo prefiere) , además, debe separar su estilo de su lógica utilizando CSS.
  • Como tiene una exposición limitada a Java, la curva de aprendizaje será significativa. Hay excelentes tutoriales de Java además de los tutoriales de JavaFX a los que he vinculado anteriormente que pueden ayudar con esto. El código central de JavaFX usa solo las instalaciones disponibles en el JDK, por lo que para usar JavaFX no necesita aprender muchas bibliotecas y marcos adicionales (como lo haría si estuviera aprendiendo JavaEE, por ejemplo). Por lo tanto, esos dos sitios tuotóricos proporcionan la mayoría de la información que necesita para ponerse al día.
  • Para la organización de aplicaciones, si tiene una aplicación compleja y necesita el respaldo de un marco de aplicación de cliente completo y probado y no le importa hacer mucho aprendizaje adicional, puede integrar JavaFX en Eclipse RCP o NetBeans RCP , que, según a sus páginas podría ahorrarle años de tiempo de desarrollo. Sin embargo, solo aconsejaría mirar dichas plataformas si sus necesidades lo justifican, porque para proyectos de tamaño pequeño a mediano, probablemente será más simple codificar las cosas directamente en JavaFX sin los marcos de plataforma de cliente complejos como Eclipse y NetBeans.
  • En cuanto a si debe usar Swing o JavaFX, no soy realmente la persona más objetiva para responder eso. JavaFX definitivamente tiene deficiencias que se harán evidentes a medida que empiece a usarlo (al igual que Swing).
  • Para tutoriales en línea, he vinculado a los más relevantes. Hay un buen conjunto de tutoriales para una aplicación completa .
  • Los libros Pro JavaFX 2 y JavaFX 2.0 Introduction by Example están altamente calificados.
Jewelsea
fuente
¡Gracias por esta increíble respuesta! JavaFX seguramente suena como una plataforma dulce y definitivamente voy a invertir mucho tiempo en ella. Además, los dos libros que ha recomendado están disponibles en mi biblioteca :)
egor
1
Ese enlace de "los mejores IDEs del mundo" realmente debería apuntar a IntelliJ IDEA;) Gran respuesta, muy informativo, ¡gracias!
Cooper
1
Cabe señalar que JavaFX actualmente no tiene ningún soporte de accesibilidad. Eso puede ser un factor decisivo para algunos (fue para mí) y tendrá que seguir usando Swing.
Cooper
JavaFX ahora proporciona soporte de accesibilidad. Esta funcionalidad se entregó en Java 8u40, para lo cual se implementó JEP 204: JavaFX Accessibility .
jewelsea
5

Vaya con un patrón Modelo-vista-presentador en su lugar. Puede ver un buen ejemplo de MVP en Swing aquí a través del proyecto mvp4j .

Si bien no es Swing, también verificaría los artículos de MVP en el sitio GWT Google Developers para obtener más información sobre este patrón y cómo aplicarlo en Java; los mismos principios de diseño se mantienen independientemente del marco y GWT es muy similar a Swing.

Un desglose rápido de cómo funciona MVP:

  • Ver : Una clase que contiene estrictamente sus componentes de GUI. Sin conocimiento de la lógica o el modelo, ni siquiera los controladores de eventos. Esto hace que las vistas sean muy tontas, pero muy desechables y cambiantes.
  • Presentador : una clase que maneja la lógica de su aplicación. Un presentador se unirá a una (o más) clases de vista y manejará toda la lógica de aplicación y el control del modelo necesarios.
  • Modelo : sus objetos de modelo de datos. Es mejor mantenerlos tan POJO como sea posible (objetos java viejos y simples).

Cuando se implementa correctamente, MVP hará que su aplicación esté muy desacoplada y le permitirá realizar modificaciones sin perturbar otras áreas de su aplicación.

Editar: según su decisión de usar JavaFX, le recomiendo que consulte los siguientes artículos

cobre
fuente
¡Gracias! Creo que he decidido utilizar JavaFX, pero leeré sobre MVP y cómo se puede usar con esta plataforma.
egor
1
¡Excelente! Si decide utilizar el patrón MVP, aquí hay un enlace que proporciona un ejemplo en JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper
2

Los widgets que necesita se pueden encontrar en Swing o SWT . La documentación contiene ejemplos de componentes (Swing) o widgets (SWT), por lo que será bastante fácil identificarlos.

Swing es una biblioteca GUI incluida en JDK y construida desde cero. SWT es externo y los componentes se basan en los nativos.

En cuanto a MVC, ambos tienen soporte para ello. En Swing tiene un Modelo para cada componente que prácticamente proporciona los datos subyacentes. El componente en sí es tanto la Vista como el Controlador.

Adrian Ber
fuente