MVC invia informazioni dalla vista al controller

0

Sto usando il pattern MVC.

Diciamo che voglio creare un nuovo oggetto e aggiungerlo al mio database.

Dove è meglio creare il nuovo oggetto:

Visualizza:

Boo boo = new Boo("awesomness");
Controller.AddDB(boo);

Controller:

public void AddDB(string name)
{
   Boo boo = new Boo(name);
   addtodb(boo);
}
    
posta Nikola 21.11.2013 - 22:21
fonte

2 risposte

5

La vista non agisce mai direttamente sul livello del modello. Utilizza solo oggetti forniti dal controller per la visualizzazione. Non dovrebbe nemmeno eseguire query di lettura, in nessun modo dovrebbe mai fare qualcosa da solo che cambi lo stato del database.

Uso MVC in un ambiente web dove ctrl.Add(new Customer(name, age)) non sarebbe comunque un'opzione. Ma la visione non dovrebbe davvero conoscere i modelli. Supponiamo che non sia solo il nome e l'età, ma vorresti anche fornire un indirizzo. Per ora tutto ciò è memorizzato in un'unica tabella clienti. Più tardi decidi che vuoi avere gli indirizzi memorizzati separatamente. Questo sarebbe un esempio del perché non vorresti avere la vista per decidere quali oggetti creare.

A seconda della lingua e dell'ambiente, anche la questione della proprietà degli oggetti e della vita sarebbe rilevante. Non vuoi diffonderlo in più posti dove non è veramente necessario. Questo specialmente nei linguaggi che non dispongono della garbage collection e la decisione su quando e dove liberare la memoria degli oggetti diventa rilevante.

    
risposta data 21.11.2013 - 22:33
fonte
0

Se il modello ha bisogno di essere aggiornato, questo deve essere fatto nel controllore, cioè, dopotutto, dove sono contenute le azioni del sistema. In ASP.NET MVC (poiché non si specifica il tipo di MVC che si sta utilizzando), si POST i dati di nuovo a un'azione che prende il modello e chiamerebbe una sorta di comando del database (sia attraverso un ORM, stored procedure o chiamata SQL in linea).

Se si esegue questa operazione nella vista, si violerebbe la separazione dei dubbi che si verificano utilizzando un'architettura MVC.

    
risposta data 22.11.2013 - 01:30
fonte

Leggi altre domande sui tag