MVC Sane è in grado di chiamare un modello tramite ViewHelper di Zend Framework

4

Recentemente ho discusso con un mio collega sul seguente problema:

Ho affermato che MVC non è sano di mente e buona pratica caricare direttamente un modello tramite ViewHelper di Zend Framework perché è un oggetto correlato a View e dovrebbe chiamare un altro controller con una strong accettazione.

Il mio collega afferma l'opposto che viene chiamato un ViewHelper prima di eseguire il rendering della vista esistente in un file .phtml, quindi può chiamare qualsiasi modello e / o servizio richiesto.

Quindi volevo sapere chi ha rivendicato la dichiarazione più sensata di MVC.

Si prega di tenere presente che il problema che ha innescato questo dibattito è sull'applicazione web che sviluppiamo; abbiamo bisogno di mostrare componenti riutilizzabili di HTML che vengono trattati come widget e renderli tramite Ajax rallenterà l'intero sito.

    
posta Dimitoriosu Deshirasu 10.03.2017 - 17:20
fonte

2 risposte

2

Nel modello MVC originale , il controller interagisce con la vista e con il modello. La vista viene notificata dal modello di modifica e può accedere al contenuto del modello ai fini della visualizzazione:

To any given Model there is attached one or more Views, each View being capable of showing one or more pictorial representations of the Model on the screen and on hardcopy. A View is also able to perform such operations upon the Model that is reasonabely associated with that View.
- Trygve Reenskaug, the inventor of MVC

Il caricamento dei dati nel modello non è un'operazione di visualizzazione. È un cambiamento dei dati del modello in memoria. Questo dovrebbe essere attivato da un controller e in nessun modo da una vista. A proposito, la maggior parte delle varianti MVC, come ad esempio MVP , applica una logica simile (ad esempio, la vista mostra solo e non cambia mai il modello).

Lo Zend Framework tuttavia sembra avere una sua comprensione di MVC , secondo il suo manuale:

View - Views define exactly what is presented to the user. Usually controllers pass data to each view to render in some format. Views will often collect data from the user, as well. This is where you're likely to find HTML markup in your MVC applications.

In un vero MVC, la vista non raccoglie mai dati.

Conclusione: hai pienamente ragione! Tuttavia, nella filosofia Zend non usa un MVC puro, quindi il tuo collega potrebbe non sbagliare completamente.

    
risposta data 10.03.2017 - 23:21
fonte
1

In your view scripts, often it is necessary to perform certain complex functions over and over: e.g., formatting a date, generating form elements, or displaying action links. You can use helper classes to perform these behaviors for you.

zend: view helpers

Tra le altre cose, questo ci dice che un helper vista non è una vista. È un'utilità utilizzata da una vista.

it is not MVC sane and good practice to directly load a Model via Zend Framework's ViewHelper because it is a View related stuff and it should call another controller by a hard acceptance.

Il modello contiene dati. Alcuni di questi dati devono essere visualizzati in una vista. Quindi affermare che questo è solo per "vedere cose correlate" non ti dà un bel taglio netto.

La migliore argomentazione che so contro questo è che una vista non dovrebbe interrogare il modello. È meglio se la vista attende che venga detto che è il momento di aggiornare e cosa visualizzare. La vista non dovrebbe sapere o preoccuparsi se è il modello a dirlo. Questa saggezza non viene da MVC. Viene da segnala, non chiedere .

ViewHelper is being called prior to rendering the view that exists in a .phtml file, so it can call any Model and/or service required.

Ciò rende il ViewHelper simile a un controller. Se è così che va bene allora. Ma non è quello che dovrebbero fare le utilità utilizzate dalla vista. Se questo è quello che sono dovrebbero preoccuparsi di fornire alla vista i comportamenti necessari per visualizzare i dati che riceve correttamente. E questo è quello che la documentazione di zend sembra dire.

MVC è un modello di progettazione molto vecchio. L'unica cosa coerente delle implementazioni MVC sono le 3 aree di responsabilità. Tutto il resto: comunicazione tra aree, dipendenze, flusso di controllo, sono tutti nell'aria. Dicendomi che stai usando MVC in realtà non mi dice molto. Sano o no.

    
risposta data 11.03.2017 - 06:55
fonte

Leggi altre domande sui tag