vista software patrones mvc modelo entre ejemplo diferencia controlador arquitectura java model-view-controller mvvm mvp

java - software - Qué usar? MVC, MVP o MVVM o...?



mvvm vs mvc (4)

Aquí hay un artículo que compara tres patrones de GUI en Java utilizados para implementar la misma pantalla tres veces:

Implementación de patrones de GUI basados ​​en eventos utilizando el framework ZK Java AJAX, Simon Massey, Sachin K Mahajan

Como los diferentes marcos e idiomas tienen ligeras variaciones en lo que las personas sienten es MVP, MVC, MVVM, MVVMP, etc. el artículo es cuidadoso al referirse a los patrones por los largos nombres dados por Martin Fowler, no por los monikers de mano corta, que son fáciles de discutir acerca de.

Claramente, 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. Por lo tanto, en esta presentación inicial, el patrón "Modelo de presentación" recibe el apodo "MVB" para Model-View-Binder como alternativa a llamarlo "MVVM":

Patrones de diseño en ZK: Java MVVM como Model-View-Binder, Simon Massey

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 ...)?

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


De hecho, la última publicación que estás buscando es esta respuesta a esta respuesta de Karsten Lentzsch (de la fama de JGoodies) en el subproceso Swing Frameworks y Best Practices Swing Frameworks and Best Practices .

Hola,

He estado escribiendo aplicaciones Swing durante varios años que muchas personas consideran elegantes. Y enseño a los desarrolladores a trabajar con Swing de manera eficiente: cómo 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 ofrecer las "mejores" prácticas, porque eso requeriría discusiones entre los desarrolladores de Swing y los proveedores de soluciones sobre los enfoques, lo que funciona bien técnicamente y lo que es fácil de entender y trabajar. 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 crear una aplicación Swing es el mayor obstáculo al que se enfrentan los desarrolladores cuando comienzan con Swing. La mayoría de los desarrolladores con los que trabajé tardaron en encontrar el diseño, implementar diseños, crear paneles, vincular datos, manejar eventos y organizar las diferentes partes del código y las capas de código. Y muchas aplicaciones Swing que he visto apestan; Además de su diseño visual deficiente, son difíciles de entender e incluso los pequeños cambios cuestan mucho. Por lo general, los desarrolladores no tenían idea de dónde colocar el código, cómo separar las preocupaciones, cómo vincular las cosas, cómo trabajar con las acciones, cómo iniciar una aplicación y cómo almacenar y restaurar el estado de la IU. La mayoría de los desarrolladores carecen de pautas a seguir.

Pero descubrí que el desarrollador promedio puede funcionar bien con Swing, aunque solo sea por la mano, de 3 a 10 días. Casi todas sus preguntas pueden ser respondidas o abordadas por código, bibliotecas, arquitectura de aplicaciones, 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 una arquitectura de 3 niveles que separa el dominio, la herramienta y las capas de presentación y se basa en un sistema de diseño productivo. Aunque la mayoría de las partes se realizan de forma programática, los desarrolladores obtienen resultados rápidamente y tanto el código como el diseño visual se vuelven bastante consistentes. Esto puede aumentar mucho la productividad de un desarrollador, en la medida en que el trabajo de Swing requiere una fracción significativamente menor del trabajo del proyecto.

¿Entonces que puedes hacer? Recomiendo estudiar el borrador de Martin Fowler para 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. Primero elegiría los siguientes patrones: "Modelo de presentación", "Dominio separado" y "Presentación separada". Personalmente, estoy a favor del Modelo de Presentación (Modelo de Aplicación para Pequeños Usuarios), sobre el patrón Modelo-Vista-Presentador (MVP). Sin embargo, MVP es una alternativa verdadera y bien estudiada.

Los patrones de Fowler se pueden combinar con una arquitectura de 3 niveles de clientes que se adapta bien para aplicaciones Swing moderadamente grandes. Consiste en una capa de dominio, una capa de presentación y una capa de modelo mediador. He delineado esta arquitectura en mi presentación de enlace de datos. Las aplicaciones basadas en MVP también se pueden estructurar 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 de 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, la primera opción para quienes son nuevos en Swing o en 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 datos de dominio a la IU. El inconveniente 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 unir campos de texto; la interfaz del documento no es apropiada para el acceso a datos genéricos. Hay algunas bibliotecas disponibles que proporcionan una interfaz ValueModel que solo pretende agregar un modelo genérico, potente y flexible para datos de un solo valor: cadenas, booleanos, números, fechas, etc.

No conozco un libro de Swing que explique un verdadero proceso de desarrollo de aplicaciones 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. De todos modos, hay una documentación de 10 años para un proceso de desarrollo de aplicaciones de Smalltalk que hace precisamente eso. La arquitectura y la documentación de Oracle JClient no son tan completas, pero pueden ser más fáciles 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 haya elegido su arquitectura y conjunto de patrones de escritorio, debe abordar las siguientes tareas más básicas de Swing: 1) mejorar la apariencia eligiendo un conjunto de apariencia profesional y apropiada para su plataforma de destino, 2) elegir un sistema de diseño que le ayude construir pantallas bien diseñadas y consistentes rápidamente, 3) elegir una solución de validación de datos, y 4) tomar una bolsa de soluciones para las tareas diarias de Swing.

Hay un par de proyectos que describen una arquitectura Swing, abordan el enlace de datos y las tareas Swing típicas, por ejemplo: JDNC de Sun, JClient / ADF de Oracle, Spring RCP, la plataforma de NetBeans. Ofrezco un conjunto comercial de soluciones Swing que se basa en las bibliotecas de código abierto JGoodies 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. Con frecuencia MVC se cita erróneamente y se malinterpreta, 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, recomiendo buscar conceptos, soluciones y bibliotecas que reflejen y funcionen con la arquitectura Swing, no con MVC.

La comunidad de inventores del patrón MVC presentó ApplicationModel (ahora conocido como Presentation Model) alrededor de 1993; MVP siguió un poco más tarde. En mi opinión, estos dos patrones son mucho más útiles para Swing que para MVC. Recientemente, el entorno que llevó el patrón del modelo de presentación a un público más amplio se trasladó a una nueva arquitectura: "Pollock". Los lectores interesados ​​pueden buscar en Google para ver cómo difiere de las cadenas de adaptadores que a menudo se combinan con 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 de mantener y obtengo resultados rápidamente.

Espero que esto ayude. Un saludo, Karsten Lentzsch

Referencias: patrones adicionales de Fowler - http://martinfowler.com/eaaDev Presentación de enlace de datos - http://www.jgoodies.com/articles/ Proceso de desarrollo de la aplicación Smalltalk - http://www.cincom.com/downloads/pdf/AppDevGuide.pdf Documentación de patrones de MVP - http://www.object-arts.com/EducationCentre/Patterns/MVP.htm Inicio del proyecto JDNC de Sun - http://jdnc.dev.java.net/ Preguntas frecuentes sobre ADF de Oracle - http://www.oracle.com/technology/products/jdev/htdocs/905/adffaq_otn.html del proyecto Spring RCP - http://www.springframework.org/spring-rcp.html Inicio de la plataforma NetBeans - http://www.netbeans.org/products/platform/ JGoodies Swing Suite - http://www.jgoodies.com/products/index.html

Si no conoces a Karsten y JGoodies, créeme, este tipo realmente sabe de lo que está hablando. Recomiendo encarecidamente leer atentamente 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 la versión anterior a la nueva .

Permítanme citar su diapositiva sobre MVC vs MVP:

  • Sí, Swing usa una forma extendida de MVC internamente
  • Pero MVC es para componentes, MVP es para aplicaciones

Y luego desde el Resumen:

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

También puede echar un vistazo a las demostraciones de Desktop Java para aprender (más precisamente la answer Scott Violet).


Puede echar un vistazo a este artículo: Hola 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.


También te recomendaría que uses Google para encontrar más información ya que tu 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 sobre el patrón, le recomendaría usar el MVC. Encontrarás muchos más ejemplos.

Mis 2 centavos.