MVC: quanto dovrebbe essere stupida la vista?

4

creare una struttura MVC e meditare su questo ...

La mia vista ha un pulsante Aggiungi. Cliccaci e mandiamo una richiesta al controller (usando pub / sub in modo che la vista non sappia a chi sta parlando). Fatto ciò, la vista disabilita il suo pulsante Aggiungi fino a quando riceve un evento "dati aggiunto" dal controller (di nuovo pub / sub, quindi non sa da chi). A questo punto aggiorna il suo elenco e riattiva il pulsante Aggiungi.

La mia domanda è questa. La vista dovrebbe contenere questa logica circa l'abilitazione / disabilitazione del pulsante Aggiungi o il controller? I miei pensieri fino ad ora sono forse il controller perché dipende dal controller se è possibile gestire più aggiunte in qualsiasi momento o se devono essere serializzati nel metodo descritto. tuttavia, è più semplice implementare lo schema corrente nella vista in quanto non è necessario esporre tanti metodi per controllare la vista.

C'è un modo preferito che è il più compatibile con MVC? Grazie:)

    
posta Jimbo 30.01.2015 - 15:57
fonte

3 risposte

8

Il controller dovrebbe essere altrettanto stupido della vista.

Quindi, in questo caso, dobbiamo chiedere informazioni sulla responsabilità.

Le viste sono responsabili degli elementi dell'interfaccia utente e della visualizzazione delle cose. I controllori sono responsabili della connessione di Views with Models e della fornitura di dati per la visualizzazione da visualizzare.

Un controller dovrebbe essere stupido su ciò che la vista ha al suo interno, pulsanti inclusi. Quindi la vista dovrebbe essere responsabile per l'abilitazione / disabilitazione del pulsante.

Mantenendo il controllore ignaro della vista, è possibile separare più facilmente la vista dal controller e avere più tipi di viste riutilizzare lo stesso controller.

    
risposta data 30.01.2015 - 16:06
fonte
1

Con ogni probabilità, dovresti farlo in modo che il pulsante Aggiungi non venga abilitato di nuovo finché non c'è qualcosa da aggiungere. Ciò significa che è necessaria la convalida sul lato client, che si verifica nella vista.

    
risposta data 30.01.2015 - 16:13
fonte
0
  • Se riesci a test accuratamente, non ci sono limiti a quanto può essere intelligente.

  • Se non è praticamente possibile testare la vista, allora dovrebbe essere così stupido da poter dire che è corretto semplicemente guardandolo.

Facciamo un esempio.

Supponiamo che tu disponga di un modello che si occupa di sondaggi di opinione pubblica, esponendo i risultati del sondaggio come una lista di float e hai una vista che mostra quei risultati come grafici a barre o grafici a torta personalizzabili.

Se la tua vista sta rendendo i grafici in una pagina web, allora è testabile, perché puoi produrre vari insiemi di dati di esempio e opzioni di visualizzazione, dar loro da mangiare alla vista, catturare l'output html per ciascuno, e controllare per fare sicuro che sia come previsto.

Se la vista mostra i grafici sullo schermo, non è realmente verificabile, perché anche se si cattura l'output in una bitmap, è estremamente difficile verificare che l'immagine contenga ciò che deve contenere.

Quindi, nel secondo caso devi smorzare la tua vista, fino al punto in cui è così semplice da non richiedere test. Questa sarebbe una vista che prende i primitivi grafici (poligoni e testi) e li invia semplicemente a un renderer. Ovviamente c'è un buco qui: da un lato si ha un modello che produce un elenco di float, e dall'altro si ha una vista che ha bisogno di un elenco di poligoni e testi. Quindi, la tua vista dovrebbe essere collegata non al tuo modello attuale, ma a un modello intermedio che trasforma gli elenchi dei risultati del sondaggio in serie di poligoni e test. Questo trasformatore è testabile, quindi può essere intelligente come deve essere.

    
risposta data 01.05.2015 - 12:40
fonte

Leggi altre domande sui tag