Alcune domande sugli oggetti del modello in un MVC

0

Ho alcune domande su come implementare i modelli e quali sono i risultati di tali implementazioni:

  1. Quando ho solo bisogno di impostare alcune variabili, non è il consumo di memoria creare un intero oggetto? Per esempio. un intero site_object solo per passare site_id's e site_names?

  2. È considerata una buona pratica mettere tutto il database query all'interno del mio oggetto modello o è meglio progettare un secondo modello oggetto per questo?

  3. Se la domanda sopra è risposta falsa, sta inserendo le query il controller è una buona alternativa?

  4. Se ho creato più istanze di oggetti modello, e memorizzo la mia query funzioni nello stesso modello, tutte queste funzioni vengono caricate memoria più volte?

  5. La domanda sopra non è male per le prestazioni?

Grazie in anticipo per il tuo tempo: D

    
posta Abayob 06.06.2016 - 22:08
fonte

2 risposte

2
  1. Sì, questo spreca memoria. Tuttavia, si consideri questo: tipico server virtuale per un sito Web di piccole dimensioni ha alcune centinaia di megabyte di RAM ad esso allocate; per un sito più grande che potrebbe essere aggiornato a una manciata di gigabyte. Un oggetto modello tipico potrebbe utilizzare fino a pochi kilobyte e avere una durata inferiore a un decimo di secondo. Ora calcola quante richieste al secondo dovrai gestire prima che facciano la differenza.

  2. No. La prassi abituale consiste nel separare completamente il modello dall'accesso al database. Si dispone di un livello di accesso ai dati che recupera e archivia gli oggetti del modello e gli oggetti del modello non sanno nulla su come è fatto.

  3. L'accesso al database nel controller è migliore rispetto al modello, ma è ancora lontano dall'ideale: in realtà, dovresti essere in grado di eseguire i test unitari sul controller e se comunica direttamente con il database tu? Lo trovo molto difficile da raggiungere. Dovresti avere un livello di accesso ai dati separato da entrambi e che viene passato al tuo controller tramite l'iniezione delle dipendenze - in questo modo, puoi dare al controller una versione falsa (uno stub di test, a volte chiamato simulato, sebbene in realtà quel nome significhi qualcosa sottilmente differente) per fornire dati a scopo di test.

  4. Dovrò rimandare a qualcuno con una maggiore comprensione degli interni di php di me per rispondere a questo. Il mio istinto è no, ma a volte una lingua può sorprenderti (e php ha una storia di sorprendermi).

  5. Di tutte le implicazioni sulle prestazioni delle cose di cui hai parlato, probabilmente ti sei perso il più importante - se il tuo modello è troppo granulare, in modo tale che le tue query al database restituiscano grandi quantità di dati indesiderati , questo può diventare un problema. È importante evitare di eseguire query per elementi di dati di grandi dimensioni (in particolare blob, come immagini o grandi quantità di testo) quando non saranno necessari. Ma è anche importante evitare di fare troppe piccole query. Ma prima di tentare di ottimizzare, implementare il modo più semplice e verificare se è abbastanza buono. Di solito è.

risposta data 06.06.2016 - 23:12
fonte
-5

1.Quando ho bisogno solo di poche variabili impostate, non è la memoria che consuma per creare un intero oggetto? Per esempio. un intero site_object solo per passare site_id e site_names?

Sì, perché per ogni oggetto creato dal modello, che consuma memoria, e non è garbage collection nel CLR (C # /. NET) lo fa. Anche se si riutilizza quel modello all'interno dell'applicazione, questo probabilmente supera la perdita di memoria dalla creazione di un intero nuovo oggetto (quando si usano le classi per creare oggetti). Inoltre, una buona pratica direbbe che per lavorare con un modello, il modello viene creato allo scopo di essere istanziato e utilizzato per interrogare, inserire o fare un altro tipo di manipolazione del database.

2. È considerata buona pratica mettere tutte le query del database all'interno del mio oggetto modello o è meglio progettare un secondo modello per esso?

In genere, si desidera eseguire una query sui dati nel controller, non sul modello, sebbene non sempre. Quindi progettare ogni modello con un oggetto che verrà interrogato con i membri nel modello (oggetto per entità aziendale) in mente, utilizzando gli script.

Most will perform some sort of communication with the database although some may not. Data is passed into and out of these objects as standard PHP arrays. In this way an object can deal with any number of database occurrences both as input or output. ◦It calls the relevant view object to create output in either HTML, PDF or CSV.

3.Se la domanda sopra è risposta falsa, le query nel controller sono una buona alternativa?

Sì, se si inseriscono gli script componente nel controller, si consente "separazione delle preoccupazioni" e si rende l'applicazione più scalabile e più facile da mantenere. È possibile utilizzare il metodo GET HTTP per effettuare una chiamata al database all'interno del controller.

> • il modello gestisce il comportamento e i dati del dominio dell'applicazione,

4.Se ho creato più istanze di oggetti modello e memorizzo le funzioni di query nello stesso modello, tutte queste funzioni vengono caricate in memoria più volte?

No, perché le funzioni di query verranno caricate con il modello, tuttavia questa non è una buona pratica, le query non dovrebbero essere nel modello.

Model Component

This ensures that all the common code is defined in one place but can be shared by many objects.

5. La domanda sopra non è male per le prestazioni?

Sì, perché è probabile che gli oggetti vengano creati e interrogati ogni volta che l'oggetto del modello viene istanziato. Tuttavia, considera che se hai usato l'oggetto una sola volta per lo scopo per cui è fatto, ridurrai la quantità di oggetti che probabilmente dovrai creare.

Spero che ti aiuti!

Maggiori informazioni su: link

    
risposta data 06.06.2016 - 22:22
fonte

Leggi altre domande sui tag