Pattern di progettazione MVC per combinare più modelli per l'uso

0

Nella mia progettazione, ho più modelli e ogni modello ha un controller. Ho bisogno di usare tutti i modelli per elaborare qualche operazione. La maggior parte degli esempi che vedo sono piuttosto semplici con 1 view, 1 controller e 1 modello. Come faresti insieme tutti questi modelli?

Solo i modi in cui posso pensare sono

1) Avere un controller di primo livello che abbia un riferimento a ogni controller. Questi controller avranno una funzione getter / setter per il loro modello.

Questo viola MVC perché ogni controller dovrebbe avere un modello?

2) Avere una classe intermedia per combinare ogni modello in un unico modello. Quindi crei un controller per quel nuovo super modello.

Conosci qualche idea migliore? Grazie.

    
posta roverred 11.11.2013 - 08:23
fonte

3 risposte

1

MVC è meglio visto come un costrutto logico piuttosto che fisico.

Sei libero di creare un modello da altri modelli o di prendere il repository (se ne hai uno) nella sua interezza come il modello se necessario. Alcuni framework, ad esempio, promuovono l'uso di viewmodels per tali scopi quando si desidera creare un singolo modello che viene utilizzato dalla vista.

Allo stesso modo nella vista, è possibile creare più viste basate sul viewmodel. Mentre il codice per questo può sedersi in una vista fisica, logicamente sono diversi.

Se ti ritrovi a passare attorno allo stesso modello per tutto, questo potrebbe indicare che hai un oggetto divino che è ovviamente meglio evitato.

    
risposta data 11.11.2013 - 16:43
fonte
3

È partito dall'idea sbagliata che esiste una relazione uno a uno tra controller e modelli in MVC. Non esiste un tale requisito. In effetti, un controller MVC dovrebbe utilizzare tutte le classi del modello MVC in quanto deve eseguire le sue operazioni.

    
risposta data 11.11.2013 - 09:40
fonte
0

In MVC, Model View e Controller sono moduli indipendenti. Il controller ha la massima potenza per determinare quale Model deve essere inviato a View per servire la richiesta.

    
risposta data 11.11.2013 - 11:05
fonte

Leggi altre domande sui tag