Sto lavorando su un pannello di controllo per un programma VoIP e ci sto lavorando da un po '. È iniziato come un piccolo progetto che ho appena fatto perché è stato divertente, ma nel tempo ho aggiunto sempre più funzionalità e ora è diventato qualcosa di abbastanza complesso.
Ho un file chiamato functions.php
e contiene funzioni per la gestione delle richieste di accesso, il recupero di un avatar di un utente, l'ottenimento di elenchi di membri, ecc. Esegue anche tutte le operazioni SQL richieste per eseguire queste funzioni.
Quello che ho notato nel corso del tempo è che questo file è diventato piuttosto grande, e c'è un sacco di codice che viene ripetuto, specialmente le operazioni SQL.
Ecco un esempio della mia funzione get_memberlist()
:
function get_memberlist($mysqli, $start = 0, $stop = 10, $sortby = 'username', $order = 'desc', $filter = null) {
if (isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) {
if ($sortby == 'nickname') $sortby = 'last_nickname';
if ($stmt = $mysqli->query("SELECT * FROM users WHERE (user_id LIKE '$filter' OR email LIKE '%$filter%' OR last_nickname LIKE '%$filter%' OR username LIKE '%$filter%') ORDER BY $sortby $order LIMIT $start , $stop")) {
if($stmt->num_rows != 0) {
$row = array();
while($r = $stmt->fetch_array(MYSQLI_ASSOC)) {
$row[] = $r;
}
return $row;
}
}
return $row;
}
}
che è anche abbastanza simile alla mia funzione getServerLogs()
:
function getServerLogs($mysqli, $limit, $start, $end, $query, $filter) {
if ($stmt = $mysqli->query("SELECT * FROM server_logs WHERE 'date' >= $start AND 'date' <= $end AND is_query = $query AND message LIKE '%$filter%' ORDER BY id DESC LIMIT $limit")) {
if($stmt->num_rows != 0) {
$row = array();
while($r = $stmt->fetch_array(MYSQLI_ASSOC)) {
$row[] = $r;
}
}
return $row;
}
}
Questo sembra inefficiente e ha un codice ripetitivo.
Quindi la mia domanda è questa: dal punto di vista del design, come dovrei scrivere le varie funzioni e come le operazioni del database?
Devo separare le funzioni dalle operazioni di database e ho solo poche funzioni db generiche da chiamare? Forse l'approccio migliore è semplicemente avere un file db e inviare la query come parametro?
Grazie.