Al momento sono in fase di refactoring di un mio progetto personale molto vecchio, che utilizzava codice procedurale PHP-in-HTML. Lo sto modernizzando come progetto di apprendimento, usando OOP dove è utile. Capisco le basi di OOP, ma mi chiedo se capisco correttamente in quanto sembrerebbe che il mio vecchio modo di farlo sia stato più veloce in questo caso.
Sulla pagina del profilo di un utente, sono elencate tutte le loro statistiche. È un gioco, quindi ci sono molti campi singoli contenenti statistiche come vincite, perdite ecc.
Ora ho creato una classe User e ho assegnato a ogni stat il suo getter / setter. Una coppia tipica ha questo aspetto:
function getEmoticon() {
if ($this->emoticon) {
return $this->emoticon;
}
$stmt = $this->conn->prepare('SELECT emoticon FROM profile WHERE id=:userid');
$stmt->execute(array('userid' => $this->userid));
$row = $stmt->fetch();
return $this->emoticon = $row['emoticon'];
}
function setEmoticon($emoticon) {
$stmt = $this->conn->prepare('UPDATE profile SET emoticon=:emoticon WHERE id= :id');
$stmt->execute(array('id' => $this->userid, 'emoticon' => $emoticon));
return $this->emoticon = $emoticon;
}
C'era una sola query SQL "GET * FROM profile" per ottenere tutte le statistiche dell'utente in una singola query. Ora però, sto ricorrendo all'utilizzo del getter per ogni stat, risultante in una query di database per ogni statistica. Nella pagina del profilo significa che è passato da 1 query di database a dozzine.
È questo il modo giusto di fare le cose? Sembra più inefficiente, ma non sono sicuro di come farlo, a meno che non disponga di un metodo di classe User come getAllStats () o qualcosa del genere.