2015-05-12 14 views
6

Sto costruendo un'app per Android tramite MVP e ho una domanda su questo modello.Presentatore vista modello - stessa vista, diversi presentatori

Dire che ho una schermata per creazione di una nuova persona. Questa schermata mostrerà uno EditText per l'inserimento del nome, un altro per il cognome, uno ImageView per mostrare l'immagine della foto selezionata, ecc. Ciò porterà a un'interfaccia View, implementata dallo Fragment. Collaborerà con un'interfaccia Presenter, implementata da un'altra classe.

Fine.

Ora ho un'altra funzionalità: una schermata per che modifica una persona esistente. In questo caso, lo View per questa funzione è identico a quello per la creazione di una nuova persona. Tuttavia, lo Presenter è diverso. Si avvierà caricando la persona esistente da db per pre-compilare la vista con i dati correnti e l'azione sul database quando si fa clic su "Salva" sarà un aggiornamento anziché un inserimento.

Quindi, penso che questo sia un esempio di MVP in cui una vista funziona con diverse implementazioni del relatore per ottenere diversi casi d'uso.

  1. pensi che questo è un presupposto corretto, o pensi caratteristiche differenti dovrebbero avere diversi View e Presenter interfacce?

  2. Inoltre, se aveste un comune View e diverso Presenters, sarà l'attuazione del View essere comune, o sarebbe portare alla stessa interfaccia implementata da due classi? In pratica, vedo due opzioni.

    • Avere un solo Fragment attuazione del View. A seconda che l'utente stia per creare una nuova persona o aggiornare una esistente, il Frammento dovrebbe ricevere e utilizzare un Presenter diverso.

    • Avere due Fragment s. Ognuno di questi istanzia un diverso Presenter. Utilizzare la composizione o l'ereditarietà per evitare la replica del codice tra i due frammenti.

Cosa pensi sia meglio fare in questi casi?

Grazie.

+0

Penso che tu sia sulla buona strada. –

+0

È possibile condividere lo stesso 'View' e avere solo un' Fragment' che riceve un 'Presenter' diverso a seconda del suo scopo (modificare o creare). – pdegand59

risposta

0

Ti imbatterai in questo quando crei un'applicazione simile a CRUD utilizzando il pattern MVP su Android.

Si può facilmente appena hanno la vista singola, fino a quando si documentare bene nella tua classe che IMPL la 'vista' per due presentatori diversi, allora 'va bene'


lo farei suggerisco personalmente di creare 2 viste, una per "creare" e una per "modificare" (potrebbero essere le stesse (per ora), ma separarle chiarisce che esse sono ... cose diverse.)

Si potrebbe facilmente vedere una situazione in futuro (o un altro impl di questo modello) in cui le viste di "crea" e "modifica" hanno effettivamente API diverse. O segnali visivi leggermente diversi, come un pulsante etichettato "crea/aggiungi" in uno e "aggiorna" in un altro.

Realizzerei personalmente una classe di librerie di viste/helper da cui è possibile utilizzare sia la logica di pull di Views. Questo dovrebbe aiutarti a ridurre il LoC complessivo, anche se crei 2 classi di "vista". Il vantaggio di questo è che puoi cambiare facilmente le viste Crea/Modifica senza preoccuparti dell'impatto sull'altro. (Tendo a pensare ai 2 file di visualizzazione, sarebbe più facile mantenere la strada quando c'è anche una "leggera" variazione tra Crea/Modifica)

Problemi correlati