2016-02-26 19 views

risposta

7

Modello - non è un database ase, non è repository, non è entità. Il modello è un'astrazione, che contiene tutti i dati, che devono essere visualizzati. E ogni View ha il proprio modello. È possibile considerare Model come contenitore per i dati tra Controller e View.

Nel modello Spring è il parametro ModelMap del metodo del controller.

Controller - prepara Model, per passarlo a View. Se il modello è abbastanza semplice, lo Controller può farlo da solo.

Ma la maggior parte dei modelli contiene molti dati. Può trattarsi di più entità da database, dati da configurazione ecc.In questo caso il controller utilizza il livello inferiore: Service, Repository. Tutti aiutano lo Сontroller a creare il modello per View.

UPD: Si tratta di uno scopo di Controller per collegare View e Model. Controller crea e riempie il Model, quindi sceglie View e passa questo creato allo View. Ecco come Modello e Visualizza ottengono la connessione.

In Spring controller sono Controller e RestController.

View - è il punto finale in cui i dati da Model (passati da Controller) verranno visualizzati all'utente. Ma un altro ruolo di View è ottenere comandi da utente e passarlo a Controller.

In primavera questa visualizzazione può essere vista di qualsiasi motore di visualizzazione: JSP, Freemaker, Thymeleaf.


Nota: di solito, non usa ControllerRepository direttamente. Tradizionalmente, Controller funziona con Service e Service utilizza Repository per ottenere dati dal database. Così i rapporti sono i seguenti: View <-Controller ->Service ->Repository

+0

Grazie per una risposta molto dettagliata. Capisco quasi tutto a parte il modo in cui il Modello e la Vista sono connessi? La classe di servizio altera il modello che altera la vista? Potresti espandere su: Controller-> Servizio-> Repository per includere la vista? – java123999

+0

Il servizio non conosce nulla su Modello e Vista. Solo il controller conosce tutto. Lo scopo del controller principale è collegare tutti i componenti l'uno con l'altro. Solo il controller può modificare il modello. Solo il Controller può chiedere al Servizio di fare qualcosa. Ad esempio, il controllore può chiedere al servizio di caricare Entity dal database. Successivamente, il Controller aggiungerà questa Enitity (o più Entità) al Modello e passerà questo Modello alla Vista. E View mostrerà questo modello, ma View neanche ha idea, da dove il controller riceve i dati memorizzati nel modello. –

+0

Così come il Servizio non sa per cosa ottenere i dati da Controller. Quindi fornisce meno dipendenze tra i componenti. –

4

Un controller accetta richieste HTTP e spesso carica o salva alcuni dati (da un servizio o DAO) e restituisce una risposta HTTP. Questa risposta potrebbe essere un reindirizzamento, una vista, o qualche JSON o un file binario.

Un controller può utilizzare i servizi, ma dovrebbe evitare di avere una propria logica. Può anche utilizzare direttamente oggetti di accesso ai dati, se non è richiesta alcuna logica di servizio.

Il modello è qualsiasi informazione a cui una vista deve fare il proprio lavoro. Non è necessariamente correlato a un database. Ad esempio, potresti avere un modello in un modulo di registrazione, con i campi email e confirmEmailAddress. Non si memorizza un campo ConfirmEmailAddress nel db, quindi non esiste una relazione 1 a 1 tra tabelle e modelli db. Inoltre, il tuo modello potrebbe essere dati per un semplice calcolo che non viene mantenuto.

+0

"Il modello è tutto ciò che informazioni la vista ha bisogno di fare il suo lavoro" - Potete per favore espandere su questo? Inoltre, se si include un repository di dati Spring nella propria applicazione, presumo che verrà visto come il livello Model? Grazie per la risposta – java123999

+1

Il modello è solo una mappa di oggetti. Questi oggetti possono o non possono essere entità. Se stai usando Spring Data, allora sì, probabilmente aggiungerebbe un elenco di entità al tuo modello, ma potresti aggiungere anche altre cose, come i dati per un menu a discesa, tutti nello stesso modello. –

+0

Grazie che sta iniziando a dare un senso, in termini di vista è essenzialmente JSP o qualcosa di simile? Mi chiedo anche come la vista in MVC si collega alla pagina effettiva sul browser visualizzata dall'utente. – java123999

-1

A mio parere, dovrebbe essere:

Modello = Servizio (logica buisness), Repository, classi di entità

controller classi = Resto del controller

Visualizza = JSP/FreeMarker

Problemi correlati