PHP OOP - Getter / setter rispetto alla memorizzazione del database

1

Problema

Sto cercando di ottimizzare l'architettura della mia applicazione web sviluppata in PHP usando il framework Symfony.

Ho un "pool" di oggetti che contiene "nuotatori". Devo visualizzare il numero di nuotatori nella mia piscina, ma solo quelli con un costume da bagno rosa.

Per fare ciò, vedo molti possibili approcci:

Approcci

  1. Crea un metodo getter personalizzato nella mia classe Pool e filtra i nuotatori secondo il colore del costume da bagno:

    public function getSwimmersInPinkSuit() {
        for each($this->getSwimmers() as $swimmer) {
            if($swimmer->getBathSuitColor() == "pink") {
                 $pinkSwimmers[] += $swimmer;
            }
        return $pinkSwimmers;
    }
    

    {{ pool.getSwimmersInPinkSuit | length }}

  2. Crea una query SQL personalizzata nel mio controller, definisci il numero lì prima di inviarlo al mio modello.

  3. Aggiungi una proprietà "$ pinkSwimmers" alla mia classe Pool e incrementalo / decrementandolo con un eventListener ogni volta che continuo nel database l'evento "un PinkSwimmer si unisce / esce dal pool". Quindi posso accedere al valore dove voglio:

    {{ pool.pinkSuits }}

  4. Utilizza una richiesta di ramificazione più densa per filtrare i nuotatori rosa direttamente nel mio modello

    {{ pool.swimmers.suitColor("pink") | lenght }} // If that's even possible o0

Domanda

Nelle quattro proposizioni di cui sopra, vedo pro e contro a ciascuno di essi, quindi:

  • Qual è la migliore pratica in questa situazione? Sto supervisionando una logica migliore in aggiunta a quelle sopra menzionate? Cerco di trovare un'implementazione che sia leggera in termini di prestazioni (memoria, larghezza di banda), ma anche facile da riconfigurare (passare dal seme rosa al seme verde o dal colore del seme allo stile di nuoto).
posta np1987 24.02.2014 - 20:52
fonte

1 risposta

0

Dai commenti, sembra che tu stia cercando 250 nuotatori con 25 proprietà ciascuno.

Anche se questo viene fatto dal codice dell'applicazione, dovrebbe comunque impiegare una quantità trascurabile di tempo, a meno che tu non stia effettuando N query per nuotatore o qualsiasi tipo di ricerca complessa per nuotatore. In questo caso, cerca il problema di selezione N + 1 e utilizza il numero minimo di query / ricerche per costruire i tuoi nuotatori.

SO risposta su N + 1 seleziona

articolo PHP su N + 1 seleziona

    
risposta data 25.02.2014 - 12:02
fonte