Is this the same thing as the 'ViewModel' from the Model-View-ViewModel (MVVM) design pattern
No.
Sarebbe questo :

Questohadeicicli.LozioBobèstato evitando accuratamente i cicli .
Invece hai questo:

Checertamentenonhacicli.Matistalasciandochiedendocomelavistasadiunaggiornamento.Ciarriveremotraunmomento.
orisitasimpleDataTransferObject(DTO)?
PercitareBobdallapaginaprecedente:
Youcanusebasicstructsorsimpledatatransferobjectsifyoulike.Oryoucanpackitintoahashmap,orconstructitintoanobject.
CleanArchitecturep207
Quindi,certo,setiva.
Masospettostrongmentecheciòchetiinfastidiscedavveroè questo :

QuestocarinopiccoloabusodiUMLcontrastaladirezionedelladipendenzadalcodicesorgenteconladirezionedelflussodicontrollo.Quièdovesitrovalarispostaallatuadomanda.
Inunarelazioned'uso:

Ilflussodicontrollo
vanellastessadirezionedelladipendenzadalcodicesorgente.
Inunarelazionediimplementazione:

ilflussodicontrollogeneralmentevanelladirezioneoppostaaquelladelcodicesorgente.
Ilchesignificachestaidavveroosservandoquesto:

DovrestiessereingradodivederecheilflussodelcontrollononarriveràmaidalPresenterallaView.
Comepuòessere?Cosasignifica?
Significachelavistahailpropriothread(chenonèinsolito)o(comesottolinea@Euphoric)ilflussodicontrollostaentrandonellavisualizzazionedaqualcos'altrononrappresentatoqui.
Sesitrattadellostessothread,laViewsapràquandoilView-Modelèprontoperessereletto.MasequestoèilcasoelavistaèunaGUIalloraavràdifficoltàaridisegnareloschermoquandol'utentelospostamentreaspettailDB.
Selavistahailpropriothread,hailproprioflussodicontrollo.Ciòsignificacheperimplementarequestavista,sarànecessarioeseguireilpollingdelmodellodivisualizzazionepernotarelemodifiche.
PoichéilPresentatorenonsachelaVistaesisteelaVistanonsacheilPresentatoreesiste,nonpossonochiamarsiaffatto.Nonpossonolanciareeventil'unocontrol'altro.TuttociòchepuòaccadereèchePresenterscriveràsulView-ModelelaViewleggeràilView-Model.Ognivoltachenehavoglia.
Secondoquestodiagramma,l'unicacosachecondividonoViewePresenterèlaconoscenzadelView-Model.Edèsolounastrutturadati.Quindinonaspettarticheabbiaalcuncomportamento.
PotrebbesembrareimpossibilemapuòesserefattofunzionareancheseilView-Modelècomplesso.Unpiccolocampoaggiornatoètuttalavistadovrebbeeseguireilpollingperrilevareunamodifica.
Oraovviamentepuoiinsisteresull'usodelpatterndiosservatore,oaverequalchecosadistrutturachetinascondaquestoproblema,matipregodicapirechenondevi.
Eccounpo'didivertimentochehoillustratoilflussodelcontrollo:

Notacheognivoltachevediilflussoandarecontroledirezionichehodefinitoprima,ciòchevedièunachiamatacheritorna.Queltruccononciaiuteràadarrivareallavista.Bene,amenochenontorniamoprimaaqualsiasicosachiamataController.Oppurepuoisolo modificare il design in modo da poter accedere alla vista. Ciò risolve anche l'inizio di un problema yo-yo con l'accesso ai dati e la sua interfaccia.
L'unica altra cosa da apprendere qui oltre a quella è che l'Interfacce caso d'uso può praticamente chiamare le cose nell'ordine che vuole fintanto che chiama il presentatore per ultimo.