Va bene chiamare un metodo di modello nella mia vista?

6

Nell'interesse di mantenere il mio controller scarno, ho inserito un metodo headline in un modello.

# My Model
class Property
  def headline 
    "#{name} | #{address}"
  end
end

(Quindi, Property Controller per il contesto ...)

# My Controller    
class PropertyController
  def show
    @property = Property.find(params[:id]) 
  end
end

Domanda: Per quanto riguarda MVC, va bene chiamare il metodo Model dalla mia vista, in questo modo?

# My View
<h1><%= @property.headline %></h1>
    
posta DaveWoodall.com 08.06.2013 - 19:11
fonte

3 risposte

3

In alcune varianti MVC, la vista viene notificata delle modifiche nel modello tramite il controller: la vista si registra come un listener su notifiche modificate dal modello, ma la vista non chiama mai i metodi del modello (si veda ad esempio il diagramma nella < a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"> articolo di wikipedia ).

In un'altra variante, la query di visualizzazione (chiama i metodi getter del) direttamente per ottenere i dati da visualizzare. Tuttavia, la vista dovrebbe essere in grado di interrogare il modello, non di modificarne il contenuto. Per quanto ne so, questo è l'approccio JSP: la vista (una pagina JSP) può contenere query che ottengono dati dal modello da rendere con il resto della pagina.

Per quanto ho capito, il tuo esempio segue il secondo approccio ed è quindi OK poiché la vista sta solo interrogando il modello tramite @ property.headline.

    
risposta data 09.06.2013 - 19:23
fonte
1

L'intero punto di MVC, o qualsiasi altro paradigma di programmazione, è quello di ottenere una buona separazione delle preoccupazioni. L'aderenza servile ai principi del tuo paradigma dovrebbe essere insistita solo quando puoi specificare un maggiore beneficio nel fare ciò che non.

Se sei disposto ad accettare la necessità di modificare il tuo View quando arriva una nuova regola del titolo, saltare una proprietà vuota su PropertyController è probabilmente soddisfacente. Soprattutto se il tuo View ha già una dipendenza inclusa nel modello.

D'altra parte, se il tuo View ha nessun altro riferimento diretto al modello , probabilmente starai meglio definendo il parametro "vuoto" su PropertyController , quindi puoi modificare o spostare la logica senza preoccuparti di View .

(Se ne hai molti, potresti voler esplorare una generica funzione get sul controller, e fare in modo che la vista chiami quello invece dei riferimenti diretti alla proprietà o al metodo.)

    
risposta data 08.06.2013 - 20:58
fonte
0

Secondo me è una buona soluzione per il modello di osservatore (il tuo modello può essere oggetto osservabile che notificherà ai suoi osservatori che i dati sono cambiati). Ad esempio, il modello (ad esempio Human) ha cambiato la sua proprietà (ad esempio il peso) in modo che ne avvisi gli osservatori registrati (ad esempio, le visualizzazioni). Dopo aver ricevuto tali informazioni, tutti gli osservatori (ad esempio la vista) possono modificare i propri dati.

    
risposta data 08.06.2013 - 22:26
fonte

Leggi altre domande sui tag