È appropriato che un modello ottenga dati "in streaming" durante il rendering?

0

Ho a che fare con il codice che rende pagine HTML. Sto pulendo una vecchia base di codice PHP.

Diciamo che ho un modello che scorre in un lungo elenco di righe in un database. Posso caricare i miei dati in una matrice e passare quella matrice al modello per separare la vista dall'altra logica, oppure posso passare nell'oggetto PDOStatement , che è un Traversable (inserisci qui l'interfaccia iterabile di qualsiasi lingua ), che riceverà le righe mentre scorre.

Il secondo metodo è appropriato?

Sembra che dovrebbe essere appropriato per me, non c'è logica nel template, usa un foreach, proprio come farebbe con un array, ma la differenza è, sotto il cofano, ciascuna delle iterazioni del ciclo stanno tirando i dati da un database. Se dovesse verificarsi un errore, è troppo tardi per gestirlo bene dopo che le intestazioni e parte della pagina sono state inviate.

    
posta duckbrain 30.07.2018 - 23:04
fonte

1 risposta

1

Se offre un vantaggio in termini di prestazioni o semplifica l'implementazione e la manutenzione del sistema, il fatto che il codice del modello richieda che il database recuperi i dati va bene.

Dovresti essere in grado di fare affidamento sul tuo database. È improbabile che si verifichi un errore, in particolare una volta avviata la query. Infatti se dovessi utilizzare un ORM come Doctrine o Eloquent , il semplice recupero dei dati da uno dei tuoi oggetti potrebbe facilmente innescare una nuova query del database. Doctrine genera le proprie classi PHP che ereditano dalla tua ma interrogano il db quando necessario e le inseriscono silenziosamente nella tua applicazione. Eloquent si aspetta che tu scriva le classi che ereditano dalla sua classe base con la capacità di interrogare il database quando necessario.

Una nota di cautela però - probabilmente non si vuole legare direttamente il livello di template front-end alla struttura del database, a meno che non sia un'applicazione molto semplice. Quindi, invece di passare PDOStatement stesso, passerei qualche altro oggetto di dominio che è o può restituire qualche forma di generatore o Traversable.

    
risposta data 30.07.2018 - 23:56
fonte

Leggi altre domande sui tag