La pregunta puede ser complicada (por su naturaleza o por mi forma de describirla), así que realmente lea esto antes de responder.MVC para aplicaciones de escritorio sin capa de datos
Tengo esta aplicación para escribir:
a) aplicación de escritorio;
b) sin capa de datos en el sentido de base de datos, archivos o cualquier otro repositorio (no es necesario guardar, almacenar o cargar datos);
c) la aplicación tendrá algunos algoritmos de cálculo implementados (Algoritmo Genético);
b) proporciona GUI que mostrará los controles para la aplicación y los resultados de los cálculos.
Estoy pensando en usar el patrón MVC pero tengo dudas sobre cómo usarlo. Dado que no tengo una capa de datos en el sentido de (por ejemplo) base de datos (los datos se generan durante la ejecución en función de la entrada del usuario) me preocupa la forma de utilizar MVC en esta implementación. Hasta ahora he llegado con dos enfoques:
GUI es la Vista. GeneticAlgorithm es el controlador. GeneticAlgorithmResults es el Modelo (como clase que solo almacena datos). Flujo básico:
- La vista envía la entrada del usuario al controlador;
- El controlador está procesando la entrada del usuario y genera datos;
- El controlador envía datos generados al modelo;
- El modelo notifica a la Vista sobre nuevos datos;
- La vista extrae datos nuevos y actualiza la pantalla.
GUI es la Vista. App Engine es el controlador. GeneticAlgorithm nad GeneticAlgorithmResults es el modelo. Ahora tenemos:
- La vista envía la entrada del usuario al controlador;
- El controlador está procesando la entrada del usuario y envía señales de control al modelo.
- El modelo actualiza su estado interno (genera datos nuevos);
- El modelo notifica al controlador sobre nuevos datos;
- El controlador extrae datos al modelo;
- El controlador procesa datos;
- El controlador empuja los datos procesados a la Vista;
- La vista actualiza la pantalla.
Primera aproximación parece ser más sencillo y más como MVC. El problema es que parte de la lógica debería estar en el Modelo: decida cuándo notificar al modelo, ya que no se mostrarán todas las actualizaciones de datos, o tal vez la visualización se actualizará con los conjuntos de datos no todos los pequeños cambios. Esas decisiones se basarán en la entrada del usuario. Además, es posible que se necesite un procesamiento adicional de los datos antes de la visualización real. Esto estaría en la Vista.
Por otro lado, el segundo enfoque parece ser más complicado y parece que se están transfiriendo muchos mensajes para lograr la tarea.Pero le da un control total de la lógica al controlador y separa las responsabilidades de la vista, el controlador y el modelo (que es el propósito principal de MVC).
¿Qué enfoque recomendaría? ¿O tal vez debería mezclarlos y usar la arquitectura de primer enfoque con flujo de comunicación desde el segundo enfoque? O algún diseño diferente?