classi accesso astrazione del database
-
25-09-2019 - |
Domanda
Al momento, ho una classe di accesso database denominato DB
, che utilizza PDO
. Ho poi una manciata di sottoclassi per l'accesso a ogni tabella:
-
Users
-
Images
-
Galleries
-
Text
-
Videos
Questo è stato bello quando ho iniziato il mio progetto, ma ora non sono sicuro se è così grande, come ho un metodo per ogni query di database che uso all'interno di ciascuna di queste classi. Ad esempio:
Images::insertNew($filename)
Images::getTotalInGallery($galleryId)
Images::getAllInGallery($galleryId, $fetchStyle)
Images::updateDescription($imageId, $description)
Images::updateGallery($imageId, $galleryId, $orderNum)
Images::getSingle($imageId)
Images::getFilename($imageId)
Images::getImageIdByFilename($filename)
Galleries::getNameById($galleryId)
Galleries::getAll()
Galleries::getMaxImages($galleryId)
Galleries::checkIfExists($galleryId)
Galleries::createNew($galleryName)
Galleries::getById($galleryId)
Galleries::delete($galleryId)
Beh, si ottiene l'idea. Sono stato l'aggiunta di questi metodi, come la necessità per loro si pone, e in fase di sviluppo, comincio semplicemente utilizzando la classe DB
:
//Execute a query
DB::query($query);
//Get a single row
$row = DB::getSingleRow($query);
//Get multiple rows
$rows = DB::getMultipleRows($query);
Quindi, le query di prova io con la mia classe di DB, poi quando si sta lavorando, io li avvolgono in un metodo della classe che è legato ad esso (classe immagine per la tavola immagini, classe gallerie per la tavola gallerie, etc.).
Mi sento come questo si continuerà a crescere e crescere come aggiungo nuove funzioni in seguito (che può essere OK, ma non sono certo). Può qualcuno critica il mio metodo e / o fornire soluzioni alternative?
Grazie!
Soluzione
No, questo in realtà suona piuttosto bene. Ti sembra di avere un solido strato di astrazione tra logica di business e di accesso ai dati (Questo è chiamato Data Mapper modello ).
L'unico problema di questo grande ottenere è che si potrebbe finire con i metodi che si sovrappongono. Si dovrebbe anche cercare di mantenere una convenction di denominazione standard in entrambe le classi.
In Immagini il metodo è Images :: insertNew e nelle gallerie è Gallerie:. CreateNew
Ti realtà hanno modelli? Perché ciò che sembra è che avete un sacco di domande per assemblare i singoli valori, ma non oggetti interi.