In MVC, perché un modello non può creare una vista?

0

Ho un'applicazione web scritta in Perl con un controller, alcune "viste" e alcuni "Modelli". Ogni "Modello" corrisponde a una "Vista". Il controller (un file) crea un oggetto Model corrispondente a ciascuna vista (la vista è un argomento CGI) quindi recupera la vista dal modulo appena creato.

In effetti, questa dovrebbe essere una brutta cosa, ma puoi discuterne un po 'di più.

La mia prima idea era che, poiché l'oggetto "Modello" dipende dalla "vista", il "modello" è in realtà una vista.

Ma anche il fatto che TUTTI i parametri cgi siano passati al Modello fa sì che il "Modello" non diventi una vera visione, ma perde ogni interesse, dal momento che è solo correlato all'attuale implementazione delle app web. In altre parole, il "Modello" mantiene il modello ma perde la sua "completezza" (il "Modello" non è facilmente comprensibile).

Sono abbastanza nuovo nell'analisi del progetto, quindi per favore non essere troppo duro. Perché è così male?

Ho realizzato un prototipo con le strutture principali che ho compreso di questa applicazione web, realizzato il più breve possibile.

#Model.pm
package Model;
import {
    # this requires an attribute called "view"
    # and this require an argument which is the cgi params
}
...

#View1.pm
package View1;
...

#Model1.pm
package ModelView1 ;
base Model;
use View1;

sub new {
    my $class = shift;
    my $arg   = shift;
    Model::DoSomething($arg);
    $self->view = new View1($arg);
    ...
}

#controller.cgi
my $model = 0;
...
     $model = new Model1( cgi_param => params() );
     #there is severall models here
...
print $model->get_view()->get_html();
    
posta MUY Belgium 21.08.2014 - 16:33
fonte

1 risposta

6

Considera il modello come solo dati . Non fa scelte e non sa come renderizzare.

  • Un prodotto può essere un modello.
  • Un elenco di prodotti può essere un modello.
  • Un pacchetto contenente l'elenco di prodotti, il carrello e le informazioni sull'utente corrente è un modello.

L'ultimo modello della lista corrisponde ai dati devi rendere la pagina, ma non dovrebbe sapere come eseguire il rendering, perché non è il compito del modello.

Per renderlo, viene usata una vista , dato che il controllore può scegliere diverse viste a seconda del contesto. Ad esempio, verrà utilizzata una vista per il rendering dei dati per un visitatore ospite ordinario, una visualizzazione diversa per un utente autenticato e una terza vista se l'utente è un amministratore. Stessi dati, diverse modalità di visualizzazione.

    
risposta data 21.08.2014 - 17:06
fonte

Leggi altre domande sui tag