Lo schema Model-View-Presenter (MVP) è utile per Android?


34

Come separare View e Presenter in Android, mentre le reazioni sulle azioni dell'utente (parte Presenter di MVP) sono impostate nelle stesse attività che mostrano gli elementi della GUI (Visualizza parte di MVP).

"Nel presentatore della vista modello, proprio come dicono Martin Fowler o Michael Feathers [2], la logica dell'interfaccia utente è separata in una classe chiamata presentatore, che gestisce tutto l'input dell'utente e che dice alla vista" stupida "cosa e quando display "(citato da qui ).

Fino ad ora ho pensato che una delle caratteristiche principali di Android sia l' attività intelligente che agisce, reagisce e mostra i risultati. Lo schema MVP è in contraddizione con la filosofia Android? Ha senso provare a realizzarlo su Android? Se sì, come si può fare?


2
+1 Buona domanda perché non ho ancora visto mvp / mvvm nelle fonti delle app Android. Sarebbe interessante vedere esempi Android di mvp e quanto overhead di codice / lib producono. Questo problema non è stato discusso su Stackoverflow - modalità-per-produrre-app-portatile-tra-Android-e-altre-piattaforme consigliate
k3b,

Forse, potrei metterlo in StackOverflow, o sarebbe contro le regole?
Gangnus,

Puoi chiedere a uno degli amministratori di migrare questa domanda invece di duplicare Qestion. Qui sulle programmersdomande ci sono domande più controverse "cosa ne pensi di ../è buono o cattivo ..." mentre stackoverflowsarebbe più simile a "Ci sono esempi di mvp in Android". Per me entrambi i posti sono ok.
k3b,

Mi dispiace tanto per la mia sventura, ma fino ad ora non ho trovato il modo di connettermi agli amministratori :-(
Gangnus,

Questa domanda NON è adatta per Stack Overflow. A proposito: puoi contattare i moderatori contrassegnando il tuo post utilizzando il link "flag".
ChrisF

Risposte:


15

Le applicazioni Android sono fondamentalmente costruite attorno a Model-View-Controller (MVC) - MVP suona come la stessa cosa, anche se non ho mai sentito il termine prima. Le attività ricoprono il ruolo di Controller, le viste XML sono proprio questo (anche se puoi costruirle programmaticamente nell'attività - è solo più facile e più semplice farlo in XML) e il modello che scrivi tu stesso. Quindi sì, quel modello è abbastanza pratico.

Una possibile ragione per cui potresti non aver sentito parlare molto di questo modello di progettazione è che il framework Android ti costringe a separare la vista. Poiché l'applicazione su dispositivi mobili tende ad essere piccola, le persone non tendono a utilizzare MVC full-on; tendono alla vista e ai livelli di azione in cui il livello di azione svolge gran parte del (piccolo) lavoro del modello.

Se stai scrivendo un'app multipiattaforma, potresti voler esaminare un approccio a quattro livelli: Visualizza, Azione, Logica aziendale e Modello. I livelli Vista e Azione sarebbero specifici della piattaforma, mentre la logica aziendale e il modello non sarebbero cambiati. Fondamentalmente, il relatore e l'interazione dell'utente vengono suddivisi nel livello Azione, che chiama il livello Logica aziendale per eseguire l'azione desiderata dall'utente.


+1! Per favore, potresti dare un riferimento o due ad alcuni buoni testi su di esso?
Gangnus,

4
Pensavo che MVP ti Actionoffrisse l'opportunità di mantenere indipendente anche la piattaforma di livello (= Presentazione), almeno quando le tue diverse piattaforme offrono funzionalità di interfaccia utente simili.
Doc Brown,

@DocBrown In teoria, sì. In pratica non sono sicuro che sarà mai possibile, perché le interazioni dell'utente potrebbero colpire la vista o il presentatore. Ad esempio, in Android i passaggi vengono gestiti dall'attività, ma nelle pagine Web vengono gestiti dalla vista (browser).
Michael K,

12
"Le applicazioni Android sono fondamentalmente costruite attorno a Model-View-Controller" - mi dispiace per tanti livelli, mi dispiace. L'architettura del framework Android è costruita attorno a God Classes in cui la logica di View / Controller è ingombra.
Igor Filippov,

2
Vorrei poter votare il commento di @ IgorFilippov più di una volta. L'idea che le app Android implementino MVC in base alla progettazione è un'idea sbagliata comune. Contrariamente a iOS, nessuna architettura della GUI è applicata da Android con una chiara separazione delle preoccupazioni e consentendo un modello isolato e facilmente testabile. Devi fornirne uno tu stesso, sia esso MVP, MVC o qualcos'altro.
Piovezan,

6

Non ho alcuna esperienza sulla programmazione Android, ma dando una breve occhiata ad alcuni tutorial introduttivi sulla programmazione Android non vedo un motivo per cui MVP dovrebbe essere meno utile come in qualsiasi altro framework guidato da eventi. La Activityclasse non è molto diversa da Dialogo Formin altri framework, quindi dovrebbe essere facile creare una classe "Activitity Presenter" per qualsiasi sottoclasse Activity dell'applicazione e inserire lì la logica di base.

Gli eventi inviati alla tua "Attività" devono essere delegati al tuo presentatore e se il relatore invierà eventi da solo o chiamerà altre funzionalità dipendenti dal sistema, la tua Attività deve fornire funzioni correlate tramite l'interfaccia che condivide con il relatore. Ma questo è sostanzialmente lo stesso di qualsiasi altro framework GUI che conosco.


+1 grazie per il tuo tempo. Ma come vedi da un'altra risposta, in Android viene utilizzato un modello simile, ma diverso. "Ho parlato in prosa per 50 anni e non lo sapevo!" Ora proverò a guardare le differenze tra i modelli.
Gangnus,

4
@Gangnus: MVP è una forma speciale di MVC, qui codebetter.com/jeremymiller/2007/07/26/… trovi maggiori informazioni. E sono abbastanza sicuro che non si tratti di "MVC o MVP". Le attività possono essere una forma di "controller", ma dipendono dalla piattaforma. Separare la logica dell'interfaccia utente in una classe di presentatore indipendente dalla piattaforma per ciascuna attività probabilmente li renderà più facili da testare e più portatili.
Doc Brown,

5

MVP è sicuramente utile per Android. Aiuta a organizzare e testare l'unità del codice. E la parte migliore è che le nuove persone che leggono il tuo codice saranno in grado di capire il codice e inizieranno a contribuire non appena sapranno cosa dovrebbe andare dove. Ecco un link molto utile per comprendere MVP con esempi .

Ecco una breve spiegazione di tutti e tre i componenti di MVP

vista

In Android MVP, una vista contiene due cose Attività - Visualizzazione risorse Android - Interfaccia java Attività Implementa la vista e si inietta (interfaccia di visualizzazione) nel presentatore in modo che il relatore possa parlare all'attività utilizzando l'interfaccia di vista. I primi tre blocchi del diagramma mostrano la comunicazione tra View e The Presenter.

Presentatore

Presenter funge da strato intermedio tra Visualizza e Dati / Modello. Visualizza (Attività) i comandi del presentatore per presentare qualcosa e il presentatore quindi prende i dati dal database / modello e restituisce la forma presentabile di dati alla vista. Visualizza quindi si occupa della visualizzazione di tali dati sullo schermo. E ricorda che Presenter è una semplice classe Java che non dovrebbe includere nessuno dei componenti Android, altrimenti renderà difficile il test unitario del presentatore.

Se si desidera utilizzare il database nel presentatore, fare in modo che l'attività crei un'istanza del database e la inietti nel presentatore. Questo ti aiuterà a deridere il database durante i test delle unità e ti consentirà di testare la logica aziendale.

Modello

Il modello in MVP non è altro che l'origine dati. Visualizza non comunica direttamente con i dati, ma comanda a Presenter di gestirli e restituire le informazioni che possono essere visualizzate senza ulteriori modifiche.


1
Le informazioni sono utili, grazie, ma sono fornite in modo negativo. Dovresti non solo citare un sito, anche tuo, ma fornire informazioni qui. Le risposte di riferimento non sono consentite. Usa invece i commenti. Non lo sto segnalando solo a causa delle informazioni utili sul tuo sito. Per favore, cambialo in un commento o inserisci nella risposta alcune informazioni chiave che stanno rispondendo al corpo della domanda. Quindi sicuramente otterrai non solo il mio vantaggio, ma anche il controllo della risposta.
Gangnus,

@Gangnus Ho fornito le informazioni necessarie nella risposta perché mettere tutto il contenuto renderà la risposta molto grande.
Ajit Singh,

1
Esistono in realtà due tipi di MVP. Vista passiva (ciò che hai descritto qui) e Supervision Presenter, che consente la mappatura diretta della vista al modello (in modo molto simile a MVVM e molti framework Web MVC).
RubberDuck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.