pattern MVP e riferimenti

2

Sto facendo un'applicazione Windows C #.

Ho chiesto questa domanda e mi è stato detto che lo spettatore / presentatore non dovrebbe mai sapere nulla del modello. Questo significa che non dovrei aggiungere un riferimento del mio modello alla GUI che sto facendo e invece di, diciamo List<Car> I dovrebbe trasportare le informazioni usando solo stringhe e int, per es. Dictionary<carID, carName> ?

Dato che sto utilizzando EntityFramework, metà del mio modello di dominio si trova fondamentalmente nel DAL e il resto è in BLL e quindi dovrei aggiungere un riferimento a entrambi i livelli. È questo l'approccio o sto sbagliando?

    
posta Nikola 08.12.2013 - 22:33
fonte

1 risposta

6

Penso che thorsten Müller abbia formulato la risposta in un modo che potrebbe confondere le persone (anche se la sua risposta è buona).

Dice

The view never directly acts on the model layer.

e

the view should really have no knowledge about models.

Entrambe queste affermazioni sono vere, ma permettimi di chiarire.

Quando thorsten dice che una "vista non agisce mai direttamente sul modello", ciò che intende è che una vista non deve essere manipolata o interagire con il modello in alcun modo significativo. Tutto quello che la vista dovrebbe fare è leggere le proprietà che è stata data e mostrarle all'utente.

"la vista non dovrebbe avere alcuna conoscenza dei modelli" significa che una vista non dovrebbe conoscere il funzionamento interno del modello. Non sa veramente cosa sono o come hanno ottenuto i loro valori. Invece, si passa un modello a una vista e la vista dice "Non ne so molto su questa cosa, ma vedo che ha delle proprietà quindi le renderò semplicemente".

Le cose diventano un po 'più discutibili, specialmente perché possiamo usare il termine modello in modo errato. Ciò che Thorsten potrebbe anche significare è che le viste generalmente non conoscono il modello di dominio.

Supponiamo di avere un'applicazione per la visualizzazione di informazioni sulle classi universitarie. Hai insegnanti, studenti e corsi. In alcune applicazioni MVC la vista non farà riferimento a questi modelli e non capirà cosa essi siano direttamente. Cioè, non puoi dare la vista di questi modelli. Invece dovresti creare ViewModels appropriati. È possibile creare uno StudentViewModel o CoursesListViewModel. Puoi popolare facilmente i modelli di visualizzazione con qualcosa come AutoMapper .

Inoltre, thorsten potrebbe anche significare che le viste dovrebbero essere generiche. Molte volte nelle applicazioni MVC quando noto che le viste e i modelli sono molto simili (ad esempio un modulo di modifica) non utilizzo visualizzazioni separate. Invece mando i miei modelli a una vista singola (forse "_EditForm.cshtml" vista parziale) e la vista genererà automaticamente tutto ciò che è necessario in base alle proprietà del modello di vista. Il codice non ha mai bisogno di essere cambiato - Semplicemente nutro la vista di un modello di vista e decide cosa dovrà essere reso. Raggiungo questo obiettivo con ModelMetaData , attributi e riflessione.

Questa è una programmazione MVC più intermedia e sarà un po 'travolgente per i principianti.

Does this mean that I should not add a reference of my model [...] I should transport the information using only strings and ints e.g. Dictionary?

No. Questo sarebbe molto brutto e difficile da mantenere. La referenziazione di modelli o modelli di visualizzazione è una pratica standard.

    
risposta data 09.12.2013 - 00:08
fonte

Leggi altre domande sui tag