MVC: visualizza il contenuto richiesto tramite la vista

6

Sto cercando di imparare come funziona il pattern MVC, quindi ho giocato un po '. Ho appena scritto questo, che aveva senso per me, fino a quando non volevo visualizzare il contenuto dell'array che è stato raccolto dalla classe Controller tramite il metodo View class output() .

<?php 

class Model {

    public $arrayPeople = array(
        1 => 'Dave',
        2 => 'Burt',
        3 => 'Jack',
        4 => 'Michael',
    );

    public $arrayAnimals = array(
        1 => 'Fish',
        2 => 'Cat',
        3 => 'Dog',
        4 => 'Tiger',
    );

}


class Controller {

    private $model;

    public function __construct( $model ){

        $this->model = $model;

    }

    public function getArray( $arrayName )
    {
        return $this->model->$arrayName;
    }

}


class View {

    private $model;
    private $controller;

    public function __construct( $model, $controller ){

        $this->model = $model;
        $this->controller = $controller;

    }

    public function output()
    {
        echo '<a href="?action=getArray&value=arrayAnimals">arrayAnimals</a><br/>';
        echo '<a href="?action=getArray&value=arrayPeople">arrayPeople</a><br/>';
    }


}


$model = new Model;
$controller = new Controller( $model );
$view = new View( $model, $controller );


if (isset($_GET['action']) && !empty($_GET['action'])) {
    $controller->{$_GET['action']}($_GET['value']);
}


echo $view->output();

Aggiorna Ho appena trovato questo in linea, che sembra suggerire che la vista dovrebbe "tirare" i dati dal modello?

class View
{
    private $model;

    public function __construct($model) {
        $this->controller = $controller;
        $this->model = $model;
    }

    public function output(){
        $data = "<p>" . $this->model->tstring ."</p>";
        require_once($this->model->template);
    }
}

Questo è confusionario come Paul Hegarty su iTunes U - 'Developing Apps for iOS' (video di conferenza 1), dice che il Modello e la Vista non dovrebbero mai comunicare e il flusso di informazioni dovrebbe sempre viaggiare attraverso il Controller? Ma l'esempio mostra la comunicazione diretta tra la vista e il modello.

    
posta MikeMason 11.06.2016 - 02:22
fonte

1 risposta

7

Controller vista modello è uno dei più vecchi se non primo progetto modelli. È stato creato in un momento in cui poche persone hanno compreso un modo corretto di interagire con gli oggetti. Di conseguenza, l'unica cosa comune che le implementazioni hanno sono tre aree distinte di responsabilità: Modello, Vista e Controller.

In che modo interagiscono e che sa cosa è in palio, come scoprirai se esegui una ricerca di immagini google per " controller vista modello "

Questosignificacheleconnessioninoncontano?NO!SignificacheModelViewControllerèqualcosacheimedicichiamano"termine spazzatura". Certo, sembra che tu mi abbia detto qualcosa di significativo quando me lo hai detto, ma in realtà mi hai detto molto poco.

Non è iniziato in questo modo. Sembrava così:


video

Da allora è stato intrecciato in tutti i tipi di nodi, al punto che tutti gli studenti che cercano di studiare MVC si imbattono in informazioni contrastanti.

Quando sento qualcuno dire che usano il controller della vista del modello, la prima cosa che chiedo è che cosa sa di cosa. Perché? Bene, se il controller non sa che la vista esiste, sei libero di scambiare le visualizzazioni senza toccare il controller. Se devi parlarci, fallo attraverso un'interfaccia, quindi almeno a nulla interesserà quando viene modificato.

Prima di soccombere al caos ti suggerisco di studiare il schema di osservazione . Ti insegna che cos'è un evento . Ciò consente un tipo di comunicazione molto diverso che alcuni di questi diagrammi rappresentano in diversi modi (una freccia tratteggiata, una linea tratteggiata, una notifica, ecc.). Non unificherà questi diagrammi ma potrebbe avere un po 'più senso.

    
risposta data 11.06.2016 - 04:03
fonte

Leggi altre domande sui tag