MVVM, esempio di utilizzo in iOS

2

Ho un controller di visualizzazione con una mapview (Apple Map), in più c'è una vista con un pulsante e un campo di testo. La vista è compattata attorno al pulsante di ricerca, quando la tocco si espande rivelando il campo di testo.

Voglio utilizzare il pattern MVVM, quindi ecco alcune domande:

  1. Chi dovrebbe essere responsabile dell'animazione? Le animazioni avvengono modificando i vincoli che ViewController mantiene, se il ViewModel fosse responsabile di ciò? Inoltre, la barra di ricerca ha un valore booleano, che indica se è aperto o chiuso, chi dovrebbe tenerlo? ViewModel o ViewController?

  2. Quale dovrebbe essere il ruolo di un ViewModel del campo di ricerca, prendere gli eventi da esso, passarli al modello e quindi notificare al ViewController?

  3. Questa app riceverà informazioni dai servizi, chi dovrebbe effettuare la chiamata ai servizi? ViewController, ViewModel o Model?

posta AR89 29.04.2017 - 15:48
fonte

1 risposta

1

Per cominciare, MVVM non ha il concetto del controller. Quindi, presumo che quando parli di ViewController intendi la vista, ad es. la forma e tutti gli elementi visivi.

Torna alle tue domande:

Q1:

Who should be responsible of the animation?

Il ViewModel è responsabile del trigger dell'animazione. In realtà, dovresti vederlo in un modo più ampio. Pensa al caso in cui, in futuro, decidi che l'animazione non è l'effetto giusto. Che tipo di elementi visivi utilizzerai è parte della vista. ViewModel dovrebbe segnalare la vista per attivare una sorta di segnali visivi. Quindi la vista lo fa accadere.

The animations happens manipulating constraints that the ViewController is holding, should the ViewModel be responsible for that?

Che tipo di vincoli? Intendi cose che riguardano l'interfaccia utente? Come per quanto tempo sarà il campo di testo? Se è così, allora la View si occupa di questi.

Also, the search bar has a boolean, indicating whether it's open or closed, who should hold it? The ViewModel or the ViewController?

Questa è una proprietà nel ViewModel. La vista torna a un evento in ViewModel e quando l'utente tocca il pulsante di ricerca, l'evento nel ViewModel cambia invia un segnale alla vista per cambiare lo stato del campo di testo (comprimi / espandi).

Q2:

What should be the role of a ViewModel of the searchfield, take events from it, pass them to the model and then notify the ViewController?

Sì, tutte queste e una cosa più importante: preparare i risultati dalla ricerca (molto probabilmente recuperata dal modello) in una forma che la vista è in grado di presentare

Q3:

This app will receive information from services, who should make the call to the services? The ViewController, the ViewModel or the Model?

Può essere il Modello o il ViewModel a seconda del tipo di servizi che si sta guardando e di come si progetta il Modello / ViewModel. Si parla di "effettuare la chiamata" e non di "ricevere" quindi penso che sia più ragionevole consentire al modello di avviare la sequenza di aggiornamento / informazione del ViewModel e quindi del ViewModel della vista

    
risposta data 01.05.2017 - 00:40
fonte

Leggi altre domande sui tag