MVC Best practice (visualizzazione acquisizione dati direttamente dal modello) e Yii Framework

1

Sto usando Yii per alcuni anni e solo ora mi sono reso conto che la loro applicazione demo (abilitata dallo strumento di generazione automatica CRUD - Gii) sembra rompere il modello di architettura MVC. Mi piacerebbe discuterne qui.

Finché ho utilizzato MVC (circa quattro anni), mi è stato sempre detto che view non dovrebbe acquisire dati direttamente dal modello . Ogni pezzo di testo su MVC, che ho letto fino ad ora, sottolineava sempre che sia la vista che i modelli dovrebbero essere completamente separati e che il controller è l'unico elemento che li unisce. Se ho bisogno di dati del modello in vista (il meccanismo più spesso usato) dovrei lasciare che il mio controller lo recuperi e feed vista con esso.

Correggimi, se ho torto, ma trovando questa domanda e una risposta ad esso mi rende sicuro, che ho ragione: mentre è tecnicamente possibile, dovrebbe essere evitato.

Quindi, in termini di Yii, sarebbe:

$probes = Probes::model()->getAllProbesForCurrentUser;

$this->render('index', array
(
    'probes'=>$probes
))

(abbastanza ovvio, penso - il controller recupera i dati dal modello e visualizza il rendering, alimentandolo con quel modello)

Se tutto quanto sopra è giusto, allora come dovrei spiegarlo:

<?php $this->widget('CGridView', array
(
    'id'=>'users-grid',
    'dataProvider'=>$model->search(),
    'columns'=>array
    (
        'name',
        'email',
        'level'
    )
)); ?>

(un widget posizionato in vista acquisisce i dati direttamente dal modello )

Cosa mi manca?

    
posta trejder 22.06.2014 - 13:56
fonte

2 risposte

4

L'array può anche essere chiamato ViewModel, è diverso dal Modello perché contiene i dati di cui ha bisogno la vista mentre il Modello rappresenta le entità di business dell'applicazione. Per la forma CRUD semplice, è probabile che siano identici. Ma per la forma complessa, un ViewModel può essere combinato da molti modelli.

    
risposta data 22.06.2014 - 14:38
fonte
-1

Questa domanda si basa su un'ipotesi completamente sbagliata. Ovviamente, la variabile $model , utilizzata nel widget, viene recuperata da un controller e alimentata per visualizzare in modo naturale come può essere nel mondo MVC.

    
risposta data 22.06.2014 - 15:21
fonte

Leggi altre domande sui tag