Array vs Oggetti nel modello di vista

4

Mi sto chiedendo, in vista dei modelli, cosa mi avrebbe aiutato a scegliere tra l'uso di matrici o oggetti per far stampare le cose negli array

{{$user->zip_code}} vs {{$user['zip_code']}}

Sto lavorando su modelli blade in Laravel / PHP fwiw.

La mia sensazione è che abbia senso usare gli oggetti: possiamo usare i metodi se abbiamo bisogno di visualizzare / formattare i dati, sembra molto più pulito nelle viste e bc di come funziona PHP con grazia se l'elemento non è " t set (un valore di array non impostato puke, quindi devi essere sicuro che tutte le possibili proprietà siano presenti ma false, oppure fare un {{(isset($user['zip_code'])) ? $user['zip_code'] : ''}} per tutto ciò che usi in una vista.

Tuttavia, ho riscontrato alcune opinioni contrastanti come: meno la vista è a conoscenza degli strati sottostanti, meglio è. Pertanto, i valori "flat" (matrici) sono meglio da usare nella vista. Non ci si deve fidare che la vista non esploda se non è impostato un valore, che dovrebbe essere gestito nel controller.

Poiché le proprietà dell'oggetto non sono codificate nei modelli di questo sistema, non possiamo fare affidamento su ogni oggetto che ha sempre le stesse informazioni a livello di modello.

Ti chiedi se ci sono altri fattori in gioco qui. Orr. Non importa

    
posta Damon 14.11.2013 - 03:26
fonte

3 risposte

2

È una percezione da sviluppatore. Il concetto di progettazione OOP è stato introdotto in PHP con l'introduzione alla versione 5 ed è stato un successo. A livello iniziale l'uso dell'array sembra essere molto più semplice dell'uso di oggetti a causa dell'uso della notazione del puntatore invece della notazione a punti come in altri linguaggi basati su OOP. Ma mentre vai avanti sulla piattaforma, gli OGGETTI saranno il modo preferito di gestire i dati. Rende il codice molto migliore da mantenere nel sistema più complesso e più semplice da comprendere per gli altri sviluppatori di PHP.

    
risposta data 15.11.2013 - 18:38
fonte
1

L'oggetto o l'array ha poche conseguenze qui, sono solo lì per fornire la vista con un archivio dati a cui può accedere. Ciò che è importante è che tu stia fornendo la vista con i dati progettati per per la vista e non semplicemente riusando altri oggetti perché sembra che si adattino. Un User è diverso dal tuo servizio di autenticazione rispetto alla tua vista.

Può sembrare conveniente passare semplicemente lo stesso oggetto User utilizzato nell'autenticazione alla vista e visualizzare il nome utente nella pagina; tuttavia, quando si desidera poter visualizzare anche un nickname in seguito, si introdurrà una proprietà nickname nel servizio di autenticazione. Allo stesso modo, quando vai a testare la tua vista, dovresti prendere in giro l'oggetto User che include le informazioni per l'autenticazione quando in realtà volevi solo visualizzare l'anme.

Un metodo migliore sarebbe creare una classe ViewModel (o array) e aggiungere le informazioni dell'utente a questo. Passa questo oggetto alla tua vista. Ora se si desidera aggiungere un nickname non è necessario modificare nulla con il servizio di autenticazione, è sufficiente estrarre il nickname dall'archivio dati appropriato nel modello di visualizzazione e continuare. Allo stesso modo, ora che la vista sta utilizzando il proprio modello, è possibile fornire valori predefiniti sensibili da visualizzare nel caso in cui si verifichi un errore (ad esempio, l'utente non può essere trovato nel database).

    
risposta data 15.11.2013 - 19:19
fonte
0

Usa oggetti.

Gli oggetti sono i più sempre migliori. Dico quasi sempre perché le persone avranno sempre le loro preferenze / opinioni / skillset (quando prendono in consegna o modificano ulteriormente il codice base). In particolare, che si tratti di Twig, Blade, ecc., È relativamente irrilevante.

Er, divago in filosofia ...

Il motivo principale è se rinomini "zip_code" in "ZipCode" (o qualcosa di simile), quindi le variabili del tuo modello saranno BREAK! Tuttavia, se stai usando un'implementazione basata su oggetti [vale a dire una vera rappresentazione del modello PHP o dell'oggetto di $ user] allora il "__get magico" verrà implementato osservando i parametri del tuo oggetto, OPPURE puoi implementare un getZipCode ( ) è necessario un metodo che restituirebbe.

L'essere punto è che sarà più robusto se usi oggetti.

    
risposta data 15.11.2013 - 00:52
fonte

Leggi altre domande sui tag