come può il relatore o la vista interagire con il modello nel pattern MVP?

6

Sto imparando i pattern MV *. MVP in questo caso. Sto cercando di ridefinire una vecchia applicazione Android nel pattern MVP per rendere le cose meno strettamente accoppiate, ma sto combattendo su un unico concetto. So che il presentatore ottiene i dati dal livello dominio che si connette attraverso il livello dati, ma come può la vista comunicare con i dati, direttamente o indirettamente? Ecco un esempio di ciò che sto cercando di capire:

Ho un servizio di download di lunga durata (presumo che questo dovrebbe essere nel livello dati) che deve essere avviato o interrotto a seconda dell'interazione dell'utente nell'interfaccia utente. Come potrei comunicare quei segnali al servizio nel livello dati? dovrei farlo attraverso il livello del dominio?

da quello che ho visto sembra che l'interfaccia utente non possa tornare ai livelli dei dati o del dominio.

Se qualcuno fosse disposto a spiegarmelo sarei molto grato.

ecco alcuni degli articoli su cui sto lavorando: prima risorsa | seconda risorsa | terza risorsa

    
posta AlexW.H.B. 19.05.2015 - 22:56
fonte

2 risposte

7

Nel modello MVP la vista è "stupida". Non fa davvero niente. Il relatore funge da oggetto di controllo nell'eradaride, mentre il modello memorizza i dati e dispone di metodi di logica aziendale.

Questo non preclude la vista dagli eventi di attivazione, che sono agganciati dal Presenter a metodi o proprietà sul modello o ad altra logica verificabile sul Presenter stesso.

Il relatore ha accesso sia al modello che alla vista. Sul tuo presentatore puoi quindi collegare eventi lanciati sulla Vista a metodi o proprietà sul Modello. La vista e il modello non conoscono mai l'uno dell'altro.

    
risposta data 20.05.2015 - 08:13
fonte
3

In entrambi i sapori MVP, Vista passiva e Supervisione controller , il relatore gestisce la logica di input e altre logiche di visualizzazione complesse. Quindi la logica di controllo del download dovrebbe sicuramente andare nel presentatore.

In una tipica impostazione di Java (presumo che Android sia simile), puoi registrare i gestori di eventi con i widget. Quindi puoi passare l'interazione dalla vista al presentatore in due modi:

  1. Il relatore si registra come gestore di eventi sul widget. Ciò richiede o l'accesso diretto dal presentatore al widget (non così buono per l'accoppiamento lento) o un metodo pubblico sulla vista. Lo vedo un po 'macchinoso.

  2. Registrare un gestore di eventi anonimi all'interno della classe di visualizzazione e chiamare un metodo presenter per gestire ulteriormente l'evento. Questo è il mio modo preferito Alcuni pseudo-codice:

    downloadStopButton.addSelectionHandler(new Selectionhandler() {
        handleEvent(Event e) {
            presenter.downloadStopCalled();
        }
    });
    

In entrambi i casi, il relatore indica al modello o al livello di servizio di interrompere il download. Se si dispone di uno stato correlato al download in un modello e il modello conosce il servizio, è possibile passare attraverso il modello. Altrimenti, penso che sia sufficiente chiamare un servizio dal presentatore.

    
risposta data 01.06.2015 - 14:07
fonte

Leggi altre domande sui tag