Dove dovrebbe "visualizzare le funzioni" in diretta in un'app Web MVC?

2

Sto usando il Yii Framework che è un framework PHP MVC che è molto simile al tuo framework MVC standard basato sul web. Voglio visualizzare i dati relativi da una tabella many-to-many come elenco di stringhe nella mia vista.

Supponendo uno schema di tabella come:

tag { id, name }
post { id, title, content, date }
post_tag { post_id, tag_id }

Un post verrà visualizzato come:

Date: 9/27/2012 
Title: Some Title
Content: blah blah blah...
Tags: Smart Funny Cool Informative

Posso ottenere ciò facendo qualcosa di simile nella mia vista Post:

<?php
  echo join(' ',
           array_map(function($tag) { return $tag->name; }, $model->tags));
?>

(dove $model->tags è una matrice di Tag oggetti associati al mio modello)

Le mie domande sono:

  1. Questa quantità di codice / logica è accettabile nella vista? (Personalmente penso che preferirei semplicemente fare riferimento a una proprietà o chiamare una singola funzione.)
  2. In caso negativo, dove dovrebbe vivere questo codice? Nel modello? il controller? un aiutante?

Potenzialmente potrei voler usare anche in altre viste. In definitiva penso che sia un problema puramente di visualizzazione che mi fa pensare che dovrebbe essere nella visualizzazione, ma poi devo ripetere il codice in qualsiasi vista in cui voglio utilizzarlo.

    
posta User 28.09.2012 - 01:27
fonte

3 risposte

2

Se si tratta di una funzione specificatamente orientata alla strutturazione dell'output, la metterei in una vista helper.

Tuttavia, se il codice tocca qualche logica, dovrebbe spostarsi su un controller o modello o scendere fino alle classi della tua business logic, a seconda di cosa sta facendo il tuo codice o della tua struttura.

Personalmente inserirò il tuo codice in una vista helper.

    
risposta data 19.10.2012 - 15:31
fonte
1

Is this amount of code/logic okay in the view? (Personally I think I'd rather just reference a property or call a single function.)

Per una separazione netta delle preoccupazioni nella progettazione MVC, è meglio spostare tutti i calcoli dalle viste al controller o al livello di servizio. Pertanto, il codice dovrebbe vivere nel tuo controller, assegnato a una nuova proprietà del tuo viewmodel o dto .

    
risposta data 28.09.2012 - 01:32
fonte
0

Penso che sarebbe una bella cosa da mettere in una vista o in una vista-aiuto. Il mio fondamento logico è che hai passato tutti i dati e stampando l'array con uno spazio intermedio che fa parte della vista. Se dovessi implementare un altro insieme di visualizzazioni per dispositivi mobili o qualcosa del genere, potrebbe essere implementato in modo diverso, e se utilizzassi un servizio web lo faresti sicuramente in modo diverso.

    
risposta data 19.10.2012 - 15:43
fonte

Leggi altre domande sui tag