MVC Modelli di istanziazione

1

Dove dovrebbero essere istallati i Modelli in un'architettura di MVC? Capisco che il modo preferito sarebbe al di fuori dei controllori, in un file di bootstrap e iniettato utilizzando un contenitore di iniezione Dependecy. Ma la maggior parte dei modelli con cui lavoro dipende dai parametri di esecuzione.

//PHP Example
class UserController {
   protected $objUser;
   protected $objDictionary;

   public function Show() {
       $objUserMapper = new UserMapper();
       $this->objUser = $objUserMapper->FindById($_GET['id']);
       $this->objDictionary = new Dictionary($this->objUser->Language);
   }
}
    
posta danidacar 16.09.2013 - 17:28
fonte

2 risposte

1

I modelli di vista vengono generalmente istanziati nei controller.

I modelli di dominio non dovrebbero essere usati nei controllori a meno che il progetto non sia molto piccolo.

L'inversione dei contenitori di controllo viene normalmente utilizzata per iniettare servizi che parlano al livello aziendale. Questo diventa utile quando scrivi la tua applicazione usando TDD come normalmente chiameresti le chiamate ai tuoi servizi.

Il flusso generale è:

  1. Recupera i dati dal servizio sotto forma di DTO o modello di dominio
  2. Automap da DTO o modello di dominio al tuo modello di visualizzazione (questo può essere fatto nelle azioni dei controllori)
  3. Visualizza la vista con un modello di vista
risposta data 16.09.2013 - 17:38
fonte
0

Nel pattern MVC, il controller crea un'istanza di entrambi i modelli e le viste.

Può farlo direttamente o tramite altri mezzi, in genere una forma di fabbrica o un contenitore IoC. In ogni caso la "nuova istanza" del Modello è detenuta dal controllore che la passa alla Vista.

Inoltre, la vista may ha una propria classe sottostante (dipende da quale framework MVC si sta usando) e non può ricevere direttamente il modello - è OK se il controller traduce il "linguaggio modello" (problemi aziendali) in "Visualizza lingua" (problemi di presentazione).

    
risposta data 16.09.2013 - 17:44
fonte

Leggi altre domande sui tag