¿Es esto lo mismo que el 'ViewModel' del patrón de diseño Model-View-ViewModel (MVVM)
No
Eso sería esto :
Eso tiene ciclos. El tío Bob ha estado evitando cuidadosamente los ciclos .
En cambio tienes esto:
Que ciertamente no tiene ciclos. Pero te deja preguntándote cómo sabe la vista sobre una actualización. Llegaremos a eso en un momento.
o es un simple objeto de transferencia de datos (DTO)?
Para citar a Bob de la página anterior:
Puede usar estructuras básicas u objetos simples de transferencia de datos si lo desea. O puede empaquetarlo en un hashmap o construirlo en un objeto.
Arquitectura limpia p207
Entonces, claro, si quieres.
Pero sospecho fuertemente que lo que realmente te está molestando es esto :
Este pequeño y lindo abuso de UML contrasta la dirección de la dependencia del código fuente con la dirección del flujo de control. Aquí es donde se puede encontrar la respuesta a su pregunta.
En una relación de uso:
el flujo de control va en la misma dirección que la dependencia del código fuente.
En una relación de implementación:
El flujo de control generalmente va en la dirección opuesta a la dependencia del código fuente.
Lo que significa que realmente estás viendo esto:
Debería poder ver que el flujo de control nunca va a llegar del Presentador a la Vista.
¿Como puede ser? Qué significa eso?
Significa que la vista tiene su propio hilo (que no es tan inusual) o (como señala @Euphoric) el flujo de control está llegando a la vista desde otra cosa que no se muestra aquí.
Si es el mismo hilo, entonces la Vista sabrá cuándo el Modelo de Vista está listo para ser leído. Pero si ese es el caso y la vista es una GUI, tendrá dificultades para volver a pintar la pantalla cuando el usuario la mueva mientras espera la base de datos.
Si la vista tiene su propio hilo, entonces tiene su propio flujo de control. Eso significa que para implementar esto, la vista tendrá que sondear el modelo de vista para notar los cambios.
Como el Presentador no sabe que existe la Vista y la Vista no sabe que existe el Presentador, no pueden llamarse entre sí. No pueden lanzar eventos entre ellos. Todo lo que puede suceder es que el presentador escribirá en el modelo de vista y la vista leerá el modelo de vista. Siempre que lo desee.
Según este diagrama, lo único que comparten la Vista y el Presentador es el conocimiento del Modelo de vista. Y es solo una estructura de datos. Así que no esperes que tenga ningún comportamiento.
Esto puede parecer imposible, pero puede hacerse funcionar incluso si View-Model es complejo. Un pequeño campo actualizado es todo lo que la vista tendría que sondear para detectar un cambio.
Ahora, por supuesto, puede insistir en usar el patrón de observador, o hacer que algo del marco le oculte este problema, pero comprenda que no tiene que hacerlo.
Aquí hay un poco de diversión que ilustraba el flujo de control:
Tenga en cuenta que cada vez que ve que el flujo va en contra de las direcciones que definí antes, lo que está viendo es una llamada que regresa. Ese truco no nos ayudará a llegar a la Vista. Bueno, a menos que primero regresemos a lo que se llama Controlador. O simplemente podría cambiar el diseño para poder acceder a la vista. Eso también soluciona lo que parece el comienzo de un problema de yoyo con el acceso a datos y su interfaz.
La única otra cosa que aprender aquí además de eso es que Use Case Interactor puede llamar a las cosas en el orden que quiera, siempre que llame al presentador en último lugar.