2009-12-15 11 views
6

Non riesco proprio a capire cosa sia esattamente il MODELLO in MVP.Model View Presenter (MVP) Qual è il modello?

Se ho una stratificata architettura PRESENTAZIONE/DOMANDA/DOMINIO/INFRASTRUTTURE, che cosa è esattamente il modello?

  1. Oggetti DOMINIO a cui si accede attraverso i livelli inferiori ?
  2. Un oggetto separato definito nel livello PRESENTATION che si associa all'interfaccia e utilizza i dati ottenuti da un livello inferiore ?

Se qualcuno potesse chiarire la mia comprensione su quello che è il MODELLO sarebbe molto apprezzato.

+1

Shhhh ... non c'è bisogno di urlare. –

risposta

6

Il Modello è normalmente il gruppo di classi/tipi/componenti che rappresentano il dominio principale (affari o altro) che l'applicazione opera all'interno. Queste sono le classi che eseguono la logica chiave richiesta, spesso sotto forma di regole aziendali, e consumano/manipolano i dati.

Nel tuo esempio a strati, il modello sarebbe per lo più si trovano nello strato di dominio, ma potrebbe anche essere nel livello di applicazione.

Penso che tu abbia difficoltà a comprenderlo perché stai cercando di combinare due modelli architettonici separati, o modi di guardare l'applicazione, essendo n-tier/n-layer rispetto a MVP.

È completamente ragionevole (e abbastanza comune) utilizzare una sorta di approccio Modello/Vista e allo stesso tempo applicare la sovrapposizione nell'applicazione.

Forse dovresti concentrarti su di loro uno alla volta per iniziare e poi sovrapporli quando hai più familiarità con entrambi.

+0

Stai dicendo che questi due modelli architettonici sono distinti e non dovrebbero essere combinati? – David

+1

I modelli riguardano esclusivamente i dati. Qualsiasi logica contenuta si riferisce ai dati e alla loro integrità. Non devono contenere la logica della vista o del controller (come visualizzare i contenuti del modello o quali modelli devono essere presentati alla vista in risposta all'input dell'utente). – Will

+0

@David, No, a dire il vero ho errato l'MVP per l'MVC più generale. MVP è interamente dedicato alla tua interfaccia utente per quanto ne so. Trovo davvero fastidioso il riutilizzo del Modello in questi vari schemi. Per la definizione di modello più ampiamente concordata, dovresti dare un'occhiata a Patterns of Enterpise Applkication Architecture di Martin Fowler. – Ash

4

In una fra le architetture Modello-Visualizza- *, il modello è quello che descrive i dati nell'applicazione (e, se si adattano alla necessità, sono passati a Vista per visualizzarli).

Se l'applicazione ha già oggetti di dominio, molto bene può essere il caso che li si potrebbe usare per il vostro modello.

+0

Justin cosa intendi se rispondessero al bisogno? – David

+0

Per "adattarsi alle esigenze" intendevo dire se esprimono i dati necessari per il rendering nelle viste. In caso contrario, il problema potrebbe essere facilmente risolto utilizzando View Models ... che sono praticamente dei modelli espressamente pensati per esprimere i dati da rappresentare in Views. –

+0

Chi sarebbe responsabile della creazione di questi modelli di vista? I modelli di vista sono uguali a quelli che ho visto indicati come DTO dello schermo? – David

1

Il modello sono i dati. Potrebbe trattarsi semplicemente di dati da un database in DataSet o potrebbe essere un modello di dominio completo con oggetti che rappresentano il tuo campo di attività.

La vista è l'interfaccia utente, che si tratti di pagine Web o di un'applicazione Windows o di un'applicazione per dispositivi mobili.

Il presentatore è la colla tra i due e il cervello di tutto l'outfit. Le azioni avviate dalla vista avvengono nel presentatore. Ad esempio, in un'applicazione WinForms, ad esempio, un evento Button.Click nella mia vista chiama semplicemente un metodo sul Presenter, che quindi esegue qualsiasi azione necessaria (e potrebbe essere solo restituire qualcosa nella vista).

Il relatore contiene un riferimento alla vista (tramite un'interfaccia) e al modello. La vista ha un riferimento al presentatore (di solito lo scrivo con forza, ma può anche essere un'interfaccia). Il modello non conosce il presentatore o la vista.

+0

È il presentatore che determinerebbe, ad esempio, se un pulsante è stato abilitato/disabilitato in base a una logica che circonda lo stato del modello. – David

+0

In generale, sì. Non sono al di sopra di fare le cose tutte in vista quando ci sono due parti interdipendenti della vista che non hanno alcuna connessione con il presentatore o il modello. Penso che la migliore regola empirica su questo sia se la cosa da fare debba essere eseguita in * qualsiasi * UI (nel qual caso dovrebbe essere fatto dal presentatore) o se è specifico per il particolare tipo di interfaccia utente che sei usando (es. qualcosa che dovresti fare in WinForms ma non in WPF). –

2

Non importa quali linee guida architetturali seguirai, M sarà sempre la stessa cosa. Il modello è il pezzo specifico per il tuo dominio. È la parte che è davvero ciò che stai cercando di fare. Il modello dovrebbe rappresentare il tuo dominio aziendale. Questo vale per MVP, MVC, MVVM, ecc.

Se si stava creando un sistema di inventario, una classe di inventario sarebbe molto probabilmente nel modello, un prodotto probabilmente sarebbe lì, un ordine, si ottiene l'idea. Queste sono le cose che compongono la tua logica di dominio.

Problemi correlati