2010-01-20 37 views
35

Comenzaré un proyecto de Java para desarrollar una aplicación de escritorio. ¿Qué usar como patrón de capa de presentación (MVC, MVP, MVVM o ...)?¿Qué usar? MVC, MVP o MVVM o ...?

... si es posible, con algún pequeño ejemplo de trabajo ... :-)

+6

creo que esta pregunta es demasiado vaga. IME, todos dicen que están haciendo MVC, pero lo que están haciendo es probablemente una variación de uno de los otros. – jsight

Respuesta

48

En realidad, el mensaje final que estás buscando es this answerthis answer de Karsten Lentzsch (JGoodies de fama) en el hilo Swing Frameworks and Best PracticesSwing Frameworks and Best Practices.

Hola,

he estado escribiendo aplicaciones de Swing desde hace varios años que muchas personas encuentran elegante. Y enseño a los desarrolladores a trabajar eficientemente con Swing: cómo para estructurar y ensamblar aplicaciones, cómo vincular y validar la fecha, , así como también cómo encontrar, diseñar, diseñar e implementar pantallas bien diseñadas en Swing.

Diría que no hay "mejores prácticas" para Swing disponibles en línea. Y Dudo que alguien pueda proporcionar las "mejores" prácticas, porque eso requeriría discusiones entre los desarrolladores de Swing y los proveedores de soluciones acerca de los enfoques, lo que funciona bien técnicamente y lo que es fácil de comprender y trabajar con . Además, las mejores prácticas explicarían quién puede lograr qué calidad de resultado, y describirían el tiempo de producción y los costos de producción; pero nunca pude encontrar esta información en línea o en un libro de Swing.

En mi opinión, la falta de buenas prácticas e información sobre cómo construir una aplicación Swing es el mayor obstáculo que enfrentan los desarrolladores al comenzar con Swing. La mayoría de los desarrolladores con los que trabajé tardaron en encontrar el diseño, implementando diseños, paneles de construcción, datos de enlace, manejo de eventos, y arreglando las diferentes partes de código y capas de código. Y muchas aplicaciones Swing que he visto chupan; además de su diseño visual deficiente, son difíciles de comprender e incluso los pequeños cambios cuestan mucho. Normalmente los desarrolladores de no tenían idea de dónde poner qué código ?, ¿cómo separar las preocupaciones de ?, ¿cómo vincular cosas ?, ¿cómo trabajar con Actions ?, ¿cómo lanzar una aplicación ?, y cómo almacenar y restaurar el estado de UI ? La mayoría de los desarrolladores de carecen de pautas a seguir.

Pero he encontrado que el desarrollador promedio puede funcionar bien con Swing, si solo se toma de la mano en unos 3 a 10 días.Casi todas sus preguntas pueden ser respondidas o dirigidas por código, bibliotecas, la arquitectura de aplicación , patrones, prácticas generales de programación, ejemplos bien diseñados, tutoriales, etc. Enseño un proceso de desarrollo de Swing que se basa en un 3 -tier arquitectura que separa el dominio , la herramienta y las capas de presentación y que se basa en un productivo sistema de diseño . Aunque la mayoría de las partes se realizan programáticamente, los desarrolladores de obtienen resultados rápidamente y tanto el código como el diseño visual se vuelven bastante consistentes. Esto puede aumentar la productividad de un desarrollador en un lote de , en la medida en que el trabajo de Swing tome una fracción significativamente menor de del trabajo del proyecto.

Entonces, ¿qué puedes hacer? Recomiendo estudiar el borrador de Martin Fowler para obtener más "Patrones de arquitectura de aplicaciones empresariales". Descubrí que estos patrones funcionan muy bien con los equipos Swing y Swing , incluso para desarrolladores que son nuevos en Swing y en la arquitectura Swing . Seleccionaría primero los siguientes patrones: "Presentación Modelo", "Dominio separado" y "Presentación separada". Yo personalmente estoy a favor del modelo de presentación (modelo de aplicación para usuarios pequeños), en el patrón Model-View-Presenter (MVP). Sin embargo, MVP es una verdadera alternativa y bien estudiada.

Los patrones de Fowler se pueden combinar con una arquitectura de 3 niveles de cliente que se adapta bien para aplicaciones Swing moderadamente grandes. Consiste en de una capa de dominio, una capa de presentación y una capa de modelo mediador. He descrito esta arquitectura en mi presentación de enlace de datos. Las aplicaciones basadas en MVP se pueden estructurar también en estos 3 niveles de clientes.

Una tarea clave para las aplicaciones Swing es el enlace de datos: cómo conectar objetos de dominio y propiedades de objetos de dominio a los componentes Swing. Básicamente puede copiar sus datos hacia adelante y hacia atrás, o crear cadenas de adaptadores desde los objetos de su dominio a los componentes de la interfaz de usuario. El enfoque de copiado es fácil de entender y, a menudo, es la primera opción para aquellos que no están familiarizados con Swing o el enlace de datos; Yo diría que esta es una buena opción. Por otro lado, copiar hace que sea mucho más difícil sincronizar vistas. Las cadenas de adaptadores y las actualizaciones automáticas o semiautomáticas pueden reducir significativamente la cantidad de código necesario para vincular los datos de dominio a la interfaz de usuario. La desventaja es que este enfoque es mucho más difícil de entender. Como ha señalado, Swing no ofrece una gran abstracción para un modelo reutilizable y flexible que se puede usar para enlazar campos de texto ; la interfaz del documento no es apropiada para el acceso a los datos genéricos . Hay algunas bibliotecas disponibles que proporcionan una interfaz de ValueModel que apenas está destinado a añadir un modelo flexible genérica, potente y para los datos de un solo valor: De Cuerda, booleanos, números, fechas, etc.

I' m no estoy al tanto de un libro de Swing que explica un verdadero proceso de desarrollo de la aplicación Swing . Idealmente, tal libro combinaría los patrones, la arquitectura y las técnicas de enlace de datos mencionadas anteriormente y describiría cómo implementarlo en Swing en . De todos modos, hay una documentación de 10 años de antigüedad para un proceso de desarrollo de aplicaciones Smalltalk que hace justamente eso.La arquitectura y la documentación de Oracle JClient no es completa, pero puede ser más fácil de leer para los desarrolladores de Java. Proporciono una presentación sobre el enlace de datos que trata sobre los patrones de Fowler, una arquitectura de 3 niveles y una implementación de Swing para estos patrones y un enlace de datos automático. Las fuentes de tutoriales de mi biblioteca de enlace pueden ayudarlo a familiarizarse con las cadenas de adaptadores y la interfaz ValueModel . La mejor documentación para el patrón de MVP se puede encontrar en los documentos de Dolphin Smalltalk.

Una vez que usted ha elegido establecer su arquitectura y de escritorio patrón, deberían tener en cuenta las siguientes tareas más básicas de Swing: 1) mejorar la apariencia por la elección de un conjunto de aspecto profesional & siente apropiado para el conjunto de plataforma de destino, 2) elija un sistema de diseño que le ayude construya pantallas bien diseñadas y consistentes rápidamente, 3) elija una solución de validación de datos , y 4) tome una bolsa de soluciones para las tareas diarias de Swing .

Hay un par de proyectos que describen una arquitectura de Swing, dirección de enlace de datos y tareas típicas del oscilación, por ejemplo: de Sun JDNC, de Oracle JClient/ADF, la RCP primavera, la plataforma NetBeans. I proporciona un conjunto comercial de soluciones Swing basadas en las bibliotecas JGoodies de código abierto y agrega una bolsa de soluciones y fuentes para todas las herramientas y demos públicas de JGoodies. Estas fuentes están destinadas a explicar cómo vincular todas las cuestiones mencionadas anteriormente.

Permítanme agregar mi advertencia estándar sobre los llamados frameworks "MVC". Swing no usa MVC, usa un patrón modificado. MVC es frecuentemente mal citado e incomprendido, especialmente en el contexto de Swing. Además, MVC es bueno para los componentes de la interfaz de usuario, no para las aplicaciones. Por lo tanto, I recomienda buscar conceptos, soluciones y bibliotecas que reflejen y trabajen con la arquitectura Swing, no con MVC.

La comunidad de inventores del patrón MVC introdujo el modelo de aplicación (ahora conocido como modelo de presentación) alrededor de 1993; MVP seguido un poco más tarde. En mi opinión, estos dos patrones son mucho más útiles para Swing que MVC. Recientemente, el entorno que llevó el patrón del modelo de presentación a un público más amplio pasó a una nueva arquitectura : "Pollock". Los lectores interesados ​​pueden buscar en Google cómo se diferencia de las cadenas de adaptadores que a menudo se combinan con los modelos de presentación .

Por último pero no menos importante, una declaración personal. Puedo trabajar mucho mejor con Swing que con otros toolkits o frameworks que utilicé anteriormente; Puedo hacer más con menos código, el código está mejor estructurado, es más fácil mantener y obtengo resultados rápidamente.

Espero que esto ayude.Saludos, Karsten Lentzsch

Referencias: otros patrones de Fowler - http://martinfowler.com/eaaDev datos de la presentación de unión - http://www.jgoodies.com/articles/ Smalltalk proceso de aplicación dev - http://www.cincom.com/downloads/pdf/AppDevGuide.pdf patrón MVP documentación - http://www.object-arts.com/EducationCentre/Patterns/MVP.htm JDNC proyecto la casa de Sun - http://jdnc.dev.java.net/ de Oracle ADF FAQ - http://www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html Spring RCP project home - http://www.springframework.org/spring-rcp.html NetBeans home - http://www.netbeans.org/products/platform/ JGoodies Swing Suite - http://www.jgoodies.com/products/index.html

Si no conoce a Karsten y JGoodies, créame, este tipo realmente sabe de lo que está hablando. Recomiendo encarecidamente leer cuidadosamente su respuesta y el material que publicó como referencia. Más específicamente, asegúrese de verificar su presentación de Patrones de escritorio y Enlace de datos. Sorprendentemente, prefiero el old version al new one.

Permítanme citar su caída sobre MVC vs MVP:

  • Sí, oscilación utiliza un extendieron forma de MVC internamente
  • Pero MVC es para componentes, MVP es para aplicaciones

Y luego del Resumen:

Pero no puede hacer un mejor trabajo que Karsten explicar esto, en el mejor de él puedo parafrasear. ¡Así que solo léelo!

También puede echar un vistazo a Desktop Java demos for learning (más precisamente Scott Violet's answer).

+1

Aquí hay algunos enlaces actualizados: http://forums.java.net/node/651182 http://www.java.net/node/661990 –

+0

@Mishax ha actualizado los enlaces para apuntar al Archivo de Internet (se agradecen las donaciones) y han agregado lo que dijo Karsten Lentzsch. Feliz fin de año de celebraciones :) –

0

yo también le recomiendo usar Google para encontrar más información, ya que su pregunta es muy vaga. De todos modos, dado que quieres hacer tu aplicación de escritorio en Java, y probablemente uses Swing, solo quiero apuntar que Swing está diseñado con un patrón MVC en mente. De todos modos, puede modificarlo fácilmente a un MVP utilizando algunas interfaces adicionales.

Si no está seguro del patrón, le recomiendo usar el MVC. Encontrarás muchos más ejemplos.

Mis 2 centavos.

1

Puede echar un vistazo a this article: Hello ZK MVVM.ZK es compatible tanto con MVP como con MVVM, y este artículo podría proporcionar algunas ideas para su elección: el modelo de programación es similar a Swing, pensó que era un marco web.

3

Aquí está un artículo que compara tres patrones GUI en Java utiliza para implementar la misma pantalla en tres ocasiones:

Implementing event-driven GUI patterns using the ZK Java AJAX framework, Simon Massey, Sachin K Mahajan

Desde diferentes marcos y lenguajes tienen ligeras variaciones sobre lo que la gente siente es MVP, MVC, MVVM y MVVMP etc. etc. el artículo es cuidadoso al referirse a los patrones por los largos nombres dados por Martin Fowler y no por los monikers de mano corta M__ que son fáciles de discutir.

Clearly ZK es un entorno de programación similar a un escritorio web o móvil, pero los patrones son igualmente aplicables a Swing u otro marco de cliente mayor. Sin embargo, sin un buen marco de enlace de datos para un determinado entorno de escritorio, no es muy factible intentar MVVM. De ahí que en esta presentación temprana del patrón "Presentación Modelo" se le da el nombre de "MVB" para el Modelo-Vista-Carpeta como alternativa a la que calificó de "MVVM":

Design Patterns in ZK: Java MVVM as Model-View-Binder, Simon Massey