È la stessa cosa di 'ViewModel' dal modello di progettazione Model-View-ViewModel (MVVM)
No.
Sarebbe questo :
Questo ha cicli. Lo zio Bob ha accuratamente evitato i cicli .
Invece hai questo:
Che certamente non ha cicli. Ma ti sta chiedendo come la vista sia a conoscenza di un aggiornamento. Ci arriveremo tra un momento.
o è un semplice Data Transfer Object (DTO)?
Per citare Bob dalla pagina precedente:
Se lo desideri, puoi utilizzare strutture di base o semplici oggetti di trasferimento dati. Oppure puoi comprimerlo in un hashmap o costruirlo in un oggetto.
Clean Architecture p207
Quindi, certo, se vuoi.
Ma sospetto fortemente che ciò che ti sta veramente infastidendo sia questo :
Questo piccolo abuso di UML contrasta la direzione della dipendenza dal codice sorgente con la direzione del flusso di controllo. Qui puoi trovare la risposta alla tua domanda.
In una relazione di utilizzo:
il flusso di controllo va nella stessa direzione della dipendenza dal codice sorgente.
In una relazione di attuazione:
il flusso di controllo in genere va nella direzione opposta rispetto alla dipendenza dal codice sorgente.
Ciò significa che stai davvero guardando questo:
Dovresti essere in grado di vedere che il flusso di controllo non passerà mai dal Presenter alla Vista.
Come può essere? Cosa significa?
Significa che la vista o ha il suo thread (che non è così insolito) o (come sottolinea @Euforico) il flusso di controllo sta venendo alla vista da qualcos'altro non rappresentato qui.
Se è lo stesso thread, View saprà quando View-Model è pronto per essere letto. Ma se questo è il caso e la vista è una GUI, sarà difficile riverniciare lo schermo quando l'utente lo sposta mentre aspettano il DB.
Se la vista ha il proprio thread, allora ha il suo flusso di controllo. Ciò significa che per implementare ciò la Vista dovrà eseguire il polling del View-Model per notare i cambiamenti.
Poiché il relatore non sa che la vista esiste e la vista non sa che esiste il presentatore, non possono chiamarsi affatto. Non possono lanciarsi gli eventi a vicenda. Tutto ciò che può accadere è che il Presentatore scriverà sul View-Model e la View leggerà il View-Model. Ogni volta che ne ha voglia.
Secondo questo diagramma l'unica cosa condivisa da View e Presenter è la conoscenza del View-Model. Ed è solo una struttura di dati. Quindi non aspettarti che abbia alcun comportamento.
Ciò potrebbe sembrare impossibile ma può essere fatto funzionare anche se il View-Model è complesso. Un piccolo campo aggiornato è che tutta la vista dovrebbe eseguire il polling per rilevare una modifica.
Ora, naturalmente, puoi insistere sull'uso del modello di osservatore, o avere alcune cose di struttura nascoste che ti nascondono questo problema, ma ti preghiamo di capire che non è necessario.
Ecco un po 'di divertimento che ho illustrato il flusso di controllo:
Nota che ogni volta che vedi il flusso andare contro le direzioni che ho definito prima, quello che vedi è una chiamata che ritorna. Questo trucco non ci aiuterà a raggiungere la vista. Bene, a meno che non torniamo prima a ciò che viene chiamato il Controller. Oppure potresti semplicemente cambiare il design in modo da poter arrivare alla vista. Ciò risolve anche quello che sembra l'inizio di un problema yo-yo con Data Access e la sua interfaccia.
L'unica altra cosa da imparare qui a parte questo è che Use Case Interactor può praticamente chiamare le cose nell'ordine che desidera fintanto che chiama l'ultimo presentatore.