Quando scrivo la generazione di pagine in PHP, mi trovo spesso a scrivere una serie di file disseminati di query di database. Ad esempio, potrei avere una query per recuperare alcuni dati su un post direttamente dal database da visualizzare su una pagina, come questo:
$statement = $db->prepare('SELECT * FROM posts WHERE id=:id');
$statement->bindValue(':id', $id, PDO::PARAM_INT);
$statement->execute();
$post = $statement->fetch(PDO::FETCH_ASSOC);
$content = $post['content']
// do something with the content
Queste query rapide e una tantum sono in genere di piccole dimensioni, ma a volte finisco con grandi parti del codice di interazione del database che comincia a sembrare piuttosto disordinato.
In alcuni casi, ho risolto questo problema creando una semplice libreria di funzioni per gestire le mie query db post-correlate, abbreviando quel blocco di codice a un semplice:
$content = post_get_content($id);
E questo è fantastico. O almeno lo è fino a quando ho bisogno di fare qualcos'altro. Forse ho bisogno di ottenere i cinque post più recenti da visualizzare in un elenco. Bene, potrei sempre aggiungere un'altra funzione:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Ma questo finisce con l'usare una query SELECT *
, che di solito non ho assolutamente bisogno, ma è spesso troppo complicata per essere ragionevolmente astratta. Alla fine finisco con una massiccia libreria di funzioni di interazione del database per ogni singolo caso d'uso, o una serie di domande confuse all'interno del codice di ogni pagina. E anche una volta che ho costruito queste librerie, mi ritroverò a dover eseguire un piccolo join che non avevo mai usato prima, e improvvisamente ho bisogno di scrivere un'altra funzione altamente specializzata per fare il lavoro.
Certo, potrei usare le funzioni per casi di uso generale e query per interazioni specifiche, ma non appena inizio a scrivere query non elaborate, comincio a tornare in accesso diretto per tutto. Oppure, o diventerò pigro e comincerò a fare cose nei loop di PHP che dovrebbero comunque essere fatti direttamente nelle query MySQL.
Vorrei chiedere a chi ha più esperienza di scrivere applicazioni su Internet: l'incremento della manutenibilità vale le linee extra di codice e le possibili inefficienze che possono essere introdotte dalle astrazioni? O semplicemente sta usando stringhe di query dirette un metodo accettabile per gestire le interazioni con il database?